Qt TCP服务器/多客户端消息读取
Qt TCP server/multi-client message reading
我正在工作的客户端/服务器应用程序(使用qt为tcp)。客户机必须每秒向服务器发送大约15条消息。问题是:
来自客户端的消息是分组接收的。我是说:当我获得readyRead()
信号并从套接字读取数据时,缓冲区中有多条消息。
这当然会导致系统滞后。
我尝试将传入的连接放在单独的线程中(每个连接一个线程),但没有任何改进。
我也试图上升一个线程,每次我得到一个readyRead()
信号,但再次没有…
但是当我在同一台pc上运行多个客户端作为服务器时,一切似乎都很好。当在网络上使用不同的pc时,会出现延迟…(使用的网络是100Mbps LAN,消息是200KB, pc之间的ping是5msec,所以我不认为这是网络问题)
在客户端,编写数据的代码非常简单:tcpSocket->write(message.toUtf8());
tcpSocket->waitForBytesWritten();
tcpSocket->flush();
我也试过没有flush()
或waitForBytesWritten()
,但相同的…
编辑:使用Qt 4.8.4和Windows 7和XP
有人知道如何克服这个吗?
提前感谢!
上次我遇到类似的问题是在Qt3.3的QProcess的stdin/stdout通信中。它在Linux和Windows上的表现完全不同。
最后我们发现,在Linux上,当数据到达时,它使用select()异步反应(快速,在大多数情况下只有一行可读),而在Windows上,新数据的存在是通过Qt主循环的QTimer轮询的(大延迟,几个消息可用)。我们尝试的一个解决方案是减少Qt源代码中的计时器周期,但最后我们切换到基于本机操作系统机制的共享内存。
你的描述听起来像你在Windows操作系统上使用类似的Qt版本。
相关文章:
- 从服务器传输到客户端的消息不会出现
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- Kafka C++客户端需要很长时间才能收到消息
- nng to pynng pub/sub. 客户端未收到任何消息
- C++ UDP 服务器在获取客户端地址配置时发送消息
- 如何使用标准库网络 TS 在服务器和客户端之间发送消息C++
- 客户端发送消息,但服务器在客户端结束程序之前不接收消息
- 节点.js到 c++ 客户端:不接收来自 socket.emit 的消息
- Qt WebSockets,如何向客户端发送消息
- 使 gRPC 客户端处于侦听模式,以侦听来自服务器的消息
- 多线程套接字编程服务器仅从 1 个客户端线程获取消息
- 无法使用C#TCP服务器和C TCP客户端接收消息
- 从客户端到浏览器的CEF中的消息传递序列化
- UDP 客户端不会在 esp32 上广播消息
- 带有 TLS v. 1.2 和 SSL v.3 电子邮件客户端的 Boost.Asio 上下文:ssl3 警报意外消息
- Datagram套接字服务器未从客户端接收消息
- 服务器进程等待客户端输入/消息的最佳方法是什么?
- 为什么我的android客户端无法接收到来自winsock c++服务器的字符串消息
- 套接字编程中的客户端到客户端消息传递
- Qt TCP服务器/多客户端消息读取