1. 3.2 BIO实现的多线程服务器historical

    服务端编程,传统的情况是使用BIO。 但是使用这种会有两个阻塞点: ServerSocket.accept() 和 InputStream.read() ,因此单线程只能服务一个客户端。 为了服务多个用户,那么必须使用多线程来处理read请求,但是线程资源是有限的。 尤其对于长链接来说,保持如此之多

  2. 3.6 NIO实现的服务器historical

    NIO vs BIO BIO NIO --- --- --- ServerSocket ServerSocketChannel Socket SocketChannel Selector SelectionKey 常见问题 客户端关闭的时候抛出异常,死循环 原因是没有判断 channel.read(

  3. 3.10 序列化协议historical

    什么是序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境 自定义规则 使用ByteBuffer,遵循如下规则 例子

  4. 3.13 心跳机制historical

    对于服务端,用于定时清除闲置channel 对于客户端,用来检测会话是否断开,是否重连

  5. 3.16 数据包协议historical

    1. 粘包拆包是什么 1. 实际数据 2. 粘包现象 3. 拆包现象 2. 出现的原因 TCP有问题是因为她是面向字节流的协议,无法分辨从哪个字节到哪个字节是一条完整的消息 UDP没问题是面向报文的协议,会保留报文之间的分界 首先“粘包”是不存在的,“粘包”这一个词主要是面向低水平或者没有受过比较系