如何在Qt中修改QWebsocket定时器

时间:2017-08-07 15:41:16

标签: c++ qt qtwebsockets

我有一个简单的客户端应用程序(使用QWebSocket)想要连接到我的服务器应用程序(即QWebSocketServer)。

当我打开与关闭/不可用的webSocketServer的连接时,我的webSocket会在30秒后触发“断开连接”信号。

这很好,因为它有助于我了解服务器已关闭/不可用,因此我可以重试或警告用户该问题。

如果客户端和服务器之间的链接失败,则会发生同样的事情。即在写入(sendBinaryMessage)到webSocket之后导致断开的信号在30秒后被触发。

我想知道QWebSocket中的默认计时器是什么以及如何修改它们?

我在哪里可以找到此类信息/文档? webSockets上的Qt文档根本没有提到这种行为!我应该阅读代码还是......?!

提前致谢

2 个答案:

答案 0 :(得分:0)

来自QWebSocket

  

此课程以QAbstractSocket为基础建模。

QAbstractSocket继承自QIODevice

这些类的文档包含有关超时的一些信息。 具体来说,你可以看到这里和那里弹出30秒的默认值。

另一个值得关注的地方是QObject的文档(QWebSocket继承它)。也许通过覆盖QObject与计时器相关的虚函数,您可以以某种方式介入这些机制之间并可能更改超时。

很抱歉没有更多的帮助。

答案 1 :(得分:0)

我怀疑这些计时器中的任何一个都是Qt的一部分;这些定时器作为底层操作系统TCP / IP实现的一部分存在。如果远程端没有响应,则等待连接超时的套接字最终会变坏。如果发送的数据在合理的时间后没有确认,则相同。

然而,Qt会异步完成所有操作,并利用信号和插槽在发生事件时通知您。这意味着如果你想缩短超时,最简单的方法就是使用与你QTimer并行运行的QAbstractSocket,如果定时器在套接字发出响应之前超时,你可以然后采取适当的行动。

如果失败,可能会有一些套接字选项允许您根据自己的喜好设置TCP连接上的各种超时。