默认
发表评论 4
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
关于服务端mina使用udp协议做数据接受的问题
阅读(37408) | 评论(4 收藏 淘帖 1
mina 把udp做成了有连接的,这样的话用它做服务端是否也要处理粘包问题?我看mina那个IoHandlerAdapter里面的 messageReceive(Iosession session,object message) 回调方法有个参数 IoSession ,这个应该是socket五元组;另外一个参数message,mina底层会不会把每次相同的客户端发过来的数据包追加到message(IoBuffer)里面?还是说 message 就是代表当前服务端接受到udp数据包。

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:MINA UDP
上一篇:简述传输层协议TCP和UDP的区别下一篇:微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案
推荐方案
评论 4
你对UDP协议的理解可能有点出入,建议看看《TCP/IP详解》里有关UDP章节:http://docs.52im.net/extend/docs/book/tcpip/vol1/11/

你看到的MINA里的IoSession这个东西,其实跟UDP协议本身没有任何关系,试想一下,你的客户端连接到服务端后,你服务端要向某个客户端发送消息的话,是不是就得要找到这个客户端的IP+端口号这个东西?MINA里的iOSession就差不多是这个作用,只是封装了一下,看起来很吊而已。

UDP的数据收发都是以一个包为单位,这也是为什么你看到的比如Java里的UDP数据都是以Package(就是“包”这个意思)为单位进行发送的,这也是UDP协议本身的定义就是这样。所以,无论是MINA还是Netty,理论上不存在粘包的情况(TCP协议才会有这个问题),UDP只会发生要么收到这个包,要么没有收到,不存在只收到一部分的情况,退一万步讲,如果真不完整,从网络底层就会被丢弃,也达不了你应用层的代码。
引用:JackJiang 发表于 2016-11-28 16:34
你对UDP协议的理解可能有点出入,建议看看《TCP/IP详解》里有关UDP章节:http://docs.52im.net/extend/docs ...

谢谢回复~明白了
引用:JackJiang 发表于 2016-11-28 16:34
你对UDP协议的理解可能有点出入,建议看看《TCP/IP详解》里有关UDP章节:http://docs.52im.net/extend/docs ...

学习了
签名: 秋天到了,终于凉快了
学习一下
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部