我正在编写一个基于服务器的客户端聊天。服务器是中央组件,处理所有传入消息和传出消息。客户端是聊天用户。他们在一个框架中看到聊天,也可以写聊天消息。这些消息将发送到服务器。服务器反过来更新所有客户端。
我的问题是客户端的同步。由于服务器是多线程的,因此可以从客户端接收两个消息,并且还必须发送更新(以消息的形式)。由于每个客户端都在其自己的线程中进行更新,因此无法保证所有客户端都将收到相同的消息。我们有一个同步问题。
我该如何解决?
我搞乱了时间戳和缓冲区。但这不是一个好的解决方案,因为无法保证在分配时间戳之后,消息将立即被放入缓冲区。
我要补充一点,我不认识客户。也就是说,我在服务器上的每个线程中只有一个打开的连接。我没有一系列客户或类似的东西来跟踪所有客户。
答案 0 :(得分:0)
我建议您为每个客户端代理实现一个队列(这是管理与每个客户端通信的对象)。 服务器对象的每次迭代(在其自己的线程上)都有效: 1.它首先从所有客户端代理的队列中读取消息 2.决定是否需要根据内部逻辑和传入消息发送任何消息 3.准备并将任何传出消息放入其所有客户端代理的队列中。
客户端代理线程工作时间表是这样的: 1.从通讯中读取。 2.写入从客户端代理到服务器的队列(如果收到任何消息)。 3.从队列中读取服务器到客户端代理。 4.写入客户端的通信通道(如果需要)。
您可能必须在每个队列上都有一个互斥锁。 希望有所帮助