当前位置: 代码迷 >> J2EE >> 请问个NIO的有关问题
  详细解决方案

请问个NIO的有关问题

热度:41   发布时间:2016-04-17 23:43:43.0
请教个NIO的问题
现在使用NIO,有个问题每次客户端发送请求来,最前面的四个字节是长度,一般长度77\79\101

然后程序会判断长度是否为java.nio.ByteBuffer.position一致,一致才进行业务处理 

但是现在客户端发送过来 5000 个字节,但是每次请求的数据只有 1000 个字节,这说明客户端发送太快,或是服务器处理太慢,系统把这5次的请求的数据加到一起了.

这个时候我要怎么分批处理?请大家贴下代码?

------解决方案--------------------
写自定义的网络协议时,最重要的一点是要考虑消息的粘包问题.

在套接字上接收到的的都是字节,你怎么分清这个字节属于上消息还是下个消息?

你可以这样做,定义一个消息头,比如连续的-1字节就表示一个新的消息开始,后面跟4个字节的消息长度,后面就是一直读到有这么多字节就表示一个消息读取成功了.

头标记 + 4字节的消息长度 + 消息正文

------解决方案--------------------
例如每次发送前判断客户端超过多少字节不给发送
------解决方案--------------------
拆分下字节,然后组合字节,可以参考下

ByteBuffer[] bb = new ByteBuffer[1024];

ByteBuffer[] bb1 = Arrays.copyOf(bb, 0);
ByteBuffer[] bb2 = Arrays.copyOf(bb, 0);

ByteBuffer[] bb3 = new ByteBuffer[bb1.length + bb2.length];
System.arraycopy(bb1, 0, bb3, 0, bb1.length);
System.arraycopy(bb2, 0, bb3, bb1.length, bb2.length);
  相关解决方案