求大神们指导,最近在做IM(PC端程序)开发,公司内部使用,现在别的基本完成,但就是确保消息安全到达机制上卡住了,具体问题如下,求帮忙,小弟在此谢过了
        客户端A与客户端B均通过TCP协议与服务端通讯,怎样确保A发送的消息一定到达B
        有些人说可以通过消息号,但每个客户端与N个用户通讯,例如A可能同时与BCD等聊天,A与BCD都要维护一个消息号吗?怎样设计消息号才可以保证消息可靠传输给对方?
        或者还有什么好的可靠投递消息的机制,求分享,谢谢

解决方案 »

  1.   

    1怎样确保A发送的消息一定到达B?
    就让B回消息给A说我收到了,服务器转发,这就涉及到了长连接,TCP协议还是很靠谱的。如果没收到就重发,服务器要做好维护
    2消息号?
    你指的是消息(Model)一种属性吧,一般是时间戳,当然还有其他属性
      

  2.   


    关键服务器怎样维护,通过一个消息确认队列吗?我现在做的思路就是通过两个来回(A<==>server,Server<==>B)保证消息可靠传输,收到A消息给与确认,然后将消息发送并写入消息确认队列,等待收到B的确认消息,收到消息后移除,长时间未收到重传
      

  3.   


    我也知道重传,关键是重传机制
    排重目前已经考虑了,对于server发送给A延迟导致A重发,服务端依旧将消息推送给B,由B剔除感谢
      

  4.   


    没有绝对的保证。你如果真的需要保证,就设计递送报告机制,每一条消息都对应额外另一条的递送报告;如果一定的时间内没有收到递送报告,那么就重发。但是,问题又来了,首先是消息开销增加了一倍,但要是递送报告丢了呢?那么,又需要设计消息ID两边都是递增的,像TCP的senquece 一样,自增,通过模仿TCP的机制去实现相应的保证。但你的系统真的需要那么复杂么?