openfire smack消息回执设置,处理掉包问题
2015-01-28 10:00
288 查看
在网络不稳定时,openfire容易出现掉包情况,原因是在客户端掉线时,openfire并不能马上知道客户端已经断线,至于要多久才能发现客户端断线,跟服务器端设置的Idle Connections 时间有关。默认为360秒。
为解决掉包问题,xmpp协议支持消息回执,这个只需在客户端发消息时设置要求回执就行,服务器端不需要另外设置。
使用smack设置消息回执方法
运行结果,在smack debug window中查看数据
test2发送消息给test1,消息id为Winlh-55
![](http://static.oschina.net/uploads/space/2014/1031/000319_INbV_117179.jpg)
test1发送回执给test2,告诉test2消息Winlh-55已经收到
![](http://static.oschina.net/uploads/space/2014/1031/000319_kr1r_117179.jpg)
上边的方法只是客户端对客户端的消息回执,另外也可以在服务器端发送回执给客户端,告诉客户端已经收到消息
xmpp消息回执协议:
发送者message加上<request xmlns='urn:xmpp:receipts'/>要求接收者发送回执
<message id="e3539-31" to="test1@xxx.com" from="test2@xxx.com/pc" type="chat"><body></body><thread></thread><request xmlns='urn:xmpp:receipts'/></message>
接收者在收到消息后回复一条message,并把消息的id放到<received xmlns="urn:xmpp:receipts" id="e3539-31"/>,告诉发送者已经收到
<message to="test2@xxx.com/pc" from="test1@xxx.com"><received xmlns="urn:xmpp:receipts" id="e3539-31"/></message>
开发者在使用时,也可以根据业务需要定义自己的回执格式。
为解决掉包问题,xmpp协议支持消息回执,这个只需在客户端发消息时设置要求回执就行,服务器端不需要另外设置。
使用smack设置消息回执方法
运行结果,在smack debug window中查看数据
test2发送消息给test1,消息id为Winlh-55
![](http://static.oschina.net/uploads/space/2014/1031/000319_INbV_117179.jpg)
test1发送回执给test2,告诉test2消息Winlh-55已经收到
![](http://static.oschina.net/uploads/space/2014/1031/000319_kr1r_117179.jpg)
上边的方法只是客户端对客户端的消息回执,另外也可以在服务器端发送回执给客户端,告诉客户端已经收到消息
发送者message加上<request xmlns='urn:xmpp:receipts'/>要求接收者发送回执
<message id="e3539-31" to="test1@xxx.com" from="test2@xxx.com/pc" type="chat"><body></body><thread></thread><request xmlns='urn:xmpp:receipts'/></message>
接收者在收到消息后回复一条message,并把消息的id放到<received xmlns="urn:xmpp:receipts" id="e3539-31"/>,告诉发送者已经收到
<message to="test2@xxx.com/pc" from="test1@xxx.com"><received xmlns="urn:xmpp:receipts" id="e3539-31"/></message>
开发者在使用时,也可以根据业务需要定义自己的回执格式。
相关文章推荐
- openfire smack消息回执设置,处理掉包问题
- openfire smack消息回执设置,处理掉包问题
- 在PreTranslateMessage中处理mouse move的消息,解决Picture Control设置notify为true之后与对话框OnMouseMove冲突的问题
- openfire服务器端增加消息回执,解决openfire丢包问题
- Activemqcpp 在接收设置了TTL的消息时候,出现receive timeout接收不到消息的问题
- Openfire 离线消息的处理机制
- IBM WEBSPHERE MQ 接收消息中文乱码问题的处理
- 关于hostapd 消息处理的细节问题,兼答网友第三次问
- 第一次用openfire 服务器,用smack 发送消息
- MFC与SDK中的重画问题 。。WM_PAINT消息的处理
- Openfire 离线消息的处理机制
- 批处理命令set的一个小问题:设置变量名与变量值只差一个文件扩展名
- centos下远程桌面的设置及问题处理
- 使用消息来处理多线程程序中的一些问题
- 使用消息来处理多线程程序中的一些问题
- 求助 MFC 消息处理的问题
- .net WCF 套接字连接中断,可能是由于消息处理错误,或者远程宿主接受超时引起,或者是底层网络资源问题导致,本地套接字时间
- 在消息响应函数中立即处理PENDING WM_PAINT解决刷新问题
- oracle 编码问题|编码处理|编码设置
- ***套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的