2013-10-18 240 views
0

我正在编写基于服务器的客户端聊天。服务器是中央组件,可处理所有传入消息和传出消息。客户是聊天用户。他们在框架中看到聊天,并且还可以编写聊天消息。这些消息被发送到服务器。服务器依次更新所有客户端。同步:客户端,服务器聊天

我的问题是客户端的同步。由于服务器是多线程的,所以这两个消息都可以从客户端接收,并且更新(以消息的形式)也必须发送出去。由于每个客户端都在自己的线程中更新,因此不保证所有客户端都会收到相同的消息。我们有一个同步问题。

我该如何解决?

我搞砸了时间戳和缓冲区。但这不是一个好的解决方案,因为不能保证在分配时间戳之后,消息将立即放入缓冲区。

我会补充一点,我不知道客户。也就是说,我在服务器上的每个线程中只有一个打开的连接。我没有一组客户或类似的东西来跟踪所有的客户。

回答

0

我建议你为每个客户端代理(这是管理与每个客户端的通信的对象)实施一个队列。 服务器对象的每次迭代(在其自己的线程上)工作: 1.它首先从所有客户端代理的队列中读取消息 2.决定是否需要根据其内部逻辑和传入消息发送任何消息 3.准备并发送任何传出消息到其所有客户端代理的队列中。

客户端代理线程工作计划是这样的: 1.从通信中读取。 2.从客户端代理写入队列到服务器(如果收到任何消息)。 3.从服务器到客户端代理的队列中读取数据。 4.写入通信通道到客户端(如果需要)。

您可能必须在每个队列上有一个互斥锁。 希望可以帮到