创建允许多连接的QTcpServer时,为什么需要在新线程中创建socket?

When creating a QTcpServer that allows for multiple connections, why do I need to make a socket in a new thread?

我正在使用 Qt 5.6。我正在开发一个简单的聊天应用程序,并且在网上遇到了几个地方都说你必须创建一个新线程来包含 QTcpSocket 来处理新线程中的所有新连接。

我想弄清楚为什么您不能只使用 QListQTcpSockets 来处理所有连接。有人可以向我解释为什么吗?

如果我弄错了,这是一件非常好的事情,请也告诉我。

提前致谢。

使用多线程 tcp 服务器或使用单线程 tcp 服务器取决于您的任务。在一些任务中,一个线程足够了,你可以 "just use a QList of QTcpSockets"。此类任务的主要特点是:

  1. 少量同时传入的连接。 (当你必须使用多线程时,同时传入连接的临界数量也取决于你的任务。但我相信,当你有超过 10 个同时传入连接时,你应该考虑多线程。)
  2. 低网络负载/低网络交互。

在其他情况下,最好让您的 tcp 服务器有机会并行执行一些作业。一个线程中有多少个连接取决于你的任务,但是创建非常多的线程也是个坏主意,因为那样你会遇到性能问题。许多时间将花费在上下文切换上。

我认为,在您的情况下,您可以使用最简单的变体 "just use a QList of QTcpSockets"