Mina框架中服务器端怎样判断信息发送失败?(从而实现消息重发机制)

hfl1162040314 2012-08-02 05:17:17
mina框架的监听可监听信息发送成功是触发和IoHlander 业务类中messageSent(IoSession session, Object message)只可收到发送成功的消息
...全文
582 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
samng508 2013-09-01
  • 打赏
  • 举报
回复
引用 2 楼 preferme 的回复:
关键看你怎样定义发送失败这个词的意思了。 比如,在网络发送数据的时候, 1.本地发送线程过载,某些数据未写入IO。 2.网络链路断开,部分数据无法到达目的地。 3.数据推送到对端,但是,对端未作处理。 当然,时间过程中可能还有其他情况,你可以认为是发送失败的。 1.发送过载的情况,一般都是通过创建多条连接并行传输,并且,采用阻塞队列进行流量控制。 2.网络链路故障,一般程序会抛出异常,进行异常处理就好。 当然,也可以辅以超时时间,进行程序调优。 3.一般的网络通信,你发送一个数据,对端都应该响应一个结果,表示,发送的数据我接收的搞定了。 因为,接收数据也会出现过载,数据格式错误,等等的状况,有个响应结果,对发送端也有利。 一般情况下,我们消息的重发机制,就是建立在这种“一问一答”式的通讯方式之上的。 如果发送了一个消息到对方,结果长时间没有应答信息,那么,我们认为,对方没收到消息, 之后我们重发上一次的消息,等待再次超时,一般而言,这种周期或者重发次数,我们定为3次。 连续3次都失败,说明这条通信线路不可靠,断开重新建立连接进行发送。
异步通讯中,连续发送多条数据,怎样判断哪一条数据失败了?
hfl1162040314 2012-08-30
  • 打赏
  • 举报
回复
谢谢,各位的回复!
冰思雨 2012-08-06
  • 打赏
  • 举报
回复
关键看你怎样定义发送失败这个词的意思了。

比如,在网络发送数据的时候,
1.本地发送线程过载,某些数据未写入IO。
2.网络链路断开,部分数据无法到达目的地。
3.数据推送到对端,但是,对端未作处理。

当然,时间过程中可能还有其他情况,你可以认为是发送失败的。
1.发送过载的情况,一般都是通过创建多条连接并行传输,并且,采用阻塞队列进行流量控制。
2.网络链路故障,一般程序会抛出异常,进行异常处理就好。
当然,也可以辅以超时时间,进行程序调优。
3.一般的网络通信,你发送一个数据,对端都应该响应一个结果,表示,发送的数据我接收的搞定了。
因为,接收数据也会出现过载,数据格式错误,等等的状况,有个响应结果,对发送端也有利。

一般情况下,我们消息的重发机制,就是建立在这种“一问一答”式的通讯方式之上的。
如果发送了一个消息到对方,结果长时间没有应答信息,那么,我们认为,对方没收到消息,
之后我们重发上一次的消息,等待再次超时,一般而言,这种周期或者重发次数,我们定为3次。

连续3次都失败,说明这条通信线路不可靠,断开重新建立连接进行发送。
it491328322 2012-08-03
  • 打赏
  • 举报
回复
前些时候,我也曾接触过mina

像楼主所说的问题,个人觉得,单靠一方是无法完成的。
通讯本身就是双方的。你的发送端只负责发送消息,至于消息是否能如期的到达接收端,并不是你发送端能完全掌控的。比如说,物流公司往外地发货,他也只负责将货物装上长途运输公司的汽车上,至于货物是否能如期到达目的地,他根本就无法预知,就好像长途汽车在途中出车祸等等,这些物流公司不可能第一时间能预知的。他只能通过对方的签收单来确认货物是否已经运送到了。
所以,我认为如果要实现楼主的要求,就必须要通讯的双方配合,比如说,我发送一条消息,对方必须在指定的时间内给个回应来告诉我消息已经正常接收完毕。

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧