我已经为 QTcpSockets 和 QThreads 上的这个问题苦苦挣扎了几天。
我有一个 QTcpServer,它侦听一个端口并使用 nextPendingConnection() 创建一个新客户端。所以现在客户端有一个 qtcpsocket,我可以用它来读写。
假设我有 100 个客户端连接到我的服务器。当其中一个想要向所有人广播消息时,我的主线程(我在其中使用 nextPendingConnection() 创建客户端)将不得不迭代 100 多个客户端并在其套接字上调用 write 方法。例如,如果 10 个用户同时广播,我将不得不进行 1000 次迭代,所以我认为客户端会有一些延迟(当用户收到消息时)。
我想在单独的线程中编写所有套接字,以便我可以并行发送数据。我知道我不能从创建它的线程调用另一个线程的套接字,我不想每个客户端使用一个线程,因为我不知道拥有很多线程是否是个好主意(此外,除非客户端断开连接,否则这些线程应始终运行)。
我已经阅读了线程财富服务器示例,但它没有回答我的问题,因为它们在发送数据后破坏了套接字;我不想破坏我的套接字,因为我必须在它上面监听传入的消息(这样我就可以广播它们)。
我想到的一件事是为每个客户端(在服务器和客户端)有 2 个套接字;这样我就可以保留一个套接字供阅读,而另一个我可以像在线程财富服务器示例中一样使用;在这种情况下,我还将使用线程池来限制任务的数量(否则这将与每个客户端使用一个线程相同)。
您能否指出我正确的方向或给我一些关于如何在每个客户端实际上没有一个线程的情况下实现并行套接字写入的提示......?
最好的祝福,
塞巴斯蒂安