我们做个P2P的多人通讯.情况是这样的,假设有ABC三个人参与通讯,每个人存储自己的操作信息并将此信息发送给另外两个人,并且他还要接收并存储其他人发过来的消息.也就是每个人都存储并向其他人发送自己的操作,在一段时间的通讯之后,三个人都完整的拥有每个人的操作信息(并且他们拥有的信息内容相同).
而我们这个操作信息对操作的发生时间有要求,也就是要求在任意时刻,ABC三个人在各自本地维护的那个操作信息结构具有相同的顺序.
因为是P2P通讯没有服务器的参与,ABC之间互相传递消息的时候,比如B和C都向A发送了他们自己的操作,数据包在网络上传输的时间不确定,所以在两个包到达A的时候,A无法判断这两个操作哪个先发生.
现在我的问题就是如何能让A有办法确定这两个包所代表操作哪一个先发生.
有个不成熟的思路就是在通讯之前让ABC都从Sever获取下Sever时间,之后给每个包都加上时间戳.
我们是用UDP方式进行通讯,比较希望能通过P2P实现通讯而非服务器转发.如果服务器转发的话,就不存在这个问题了.

解决方案 »

  1.   

    为什么不分开保存呢
    如,A保存自己的操作,A1A2A3,保存B的操作B1B2B3 保存C的操作C1C2C3 按照lz的意思是要保存成类似A1B1B2A2A3C1B3C2C3的,并且ABC都是这样的顺序,不明白你为什么这么保存信息
      

  2.   

    我想确定ABC各自发生操作的时间,并且让操作信息按照这个时间排序.因为ABC要定期处理本地已经存储的这些操作信息,而且需要按照各个操作发生的时间顺序(与用户无关,不同用户的操作是平等的,他们共同处理一个东西)来处理这些操作.
    如果只是简单按照A1A2A3 B1B2B3这样的顺序存储的话,就无法得值A1,A2,A3,B1,B2,B3发生的先后顺序了.
      

  3.   

    这种情况我感觉不要判断时间先后,不停地发就是了,收到什么就显示什么,要快~再快~
    如果网络稍稍卡一点,人的眼睛根本看不出来
    如果网络十分卡,会一顿一顿的,那谁也没办法~大型网游<魔兽世界>做地好不,网络卡地时候它也白扯
      

  4.   

    时间戳肯定是要的,而且时间戳只能由一个主机产生,其他两个bc,从a上取得时间戳。
    这样abc是基于同一个时钟。任何动作都是线性的也就同步了。按时间排序就是完全同步的。
    更重要的问题是,要实现udp的可靠传输,从而何证兼有tcp的可靠和udp的快速。在一小段时间内(缓存,也叫容忍间隙)进行包的比较,如果不相同就等其他用户。