【问题标题】:When creating a QTcpServer that allows for multiple connections, why do I need to make a socket in a new thread?创建允许多个连接的 QTcpServer 时,为什么需要在新线程中创建套接字?
【发布时间】:2017-01-04 09:06:05
【问题描述】:

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

我试图弄清楚为什么您不能只使用QListQTcpSockets 来处理所有连接。谁能给我解释一下为什么?

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

提前致谢。

【问题讨论】:

  • 可以拥有QTcpSockets 的QList 来处理主线程上的所有连接。事实上,这种解决方案在 Qt 中是首选的。您根本不必为每个连接创建一个新线程。
  • 提供一些您所指的在线地点的链接。我不明白“创建一个新线程以包含 QTcpSocket 以处理 所有 连接”是什么意思,你会如何有可以处理所有连接的QTcpSocket?你的意思是QTcpServer
  • @Mike 哦,我的意思是说我为每个QTcpSocket 创建一个新线程。最值得注意的是,我是从 voidrealm 在 YouTube 上的 qt 播放列表中听到的。我是在深夜做的,所以我有点累。感谢您的回复。

标签: multithreading qt sockets qtcpsocket qtcpserver


【解决方案1】:

使用多线程 tcp 服务器或使用单线程 tcp 服务器取决于您的任务。在某些任务中,一个线程就足够了,您可以“只使用QTcpSocketsQList”。此类任务的主要特点是:

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

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

我认为,在您的情况下,您可以使用最简单的变体,“只需使用 QListQTcpSockets

【讨论】:

  • 感谢您的回复!暂时想知道这个问题的答案。
猜你喜欢
  • 1970-01-01
  • 2013-07-31
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 2023-02-11
相关资源
最近更新 更多