如何在 Qt 中修改 QWebsocket 定时器
Posted
技术标签:
【中文标题】如何在 Qt 中修改 QWebsocket 定时器【英文标题】:How to modify QWebsocket timers in Qt 【发布时间】:2017-08-07 15:41:16 【问题描述】:我有一个简单的客户端应用程序(使用QWebSocket
)想要连接到我的服务器应用程序(即QWebSocketServer
)。
当我打开与关闭/不可用的 webSocketServer 的连接时,我的 webSocket 会在 30 秒后触发“断开连接”信号。
这很好,因为它可以帮助我了解服务器已关闭/不可用,以便我可以重试或警告用户该问题。
如果客户端和服务器之间的链接失败,也会发生同样的事情。即在将 (sendBinaryMessage) 写入 webSocket 后,会在 30 秒后触发断开连接的信号。
我想知道QWebSocket
中的默认计时器是什么以及如何修改它们?
在哪里可以找到此类信息/文档? webSockets 上的 Qt 文档根本没有提到这种行为!我应该阅读代码还是...?!
提前致谢
【问题讨论】:
【参考方案1】:来自QWebSocket:
这个类以QAbstractSocket为模型。
QAbstractSocket
又继承自 QIODevice
。
这些类的文档有一些关于超时的信息。 具体来说,您可以看到这里和那里弹出的默认 30 秒。
另一个要看的地方是QObject
的文档(QWebSocket继承了它)。也许通过覆盖QObject
的与计时器相关的虚函数,您可以以某种方式进入这些机制之间并可能更改超时。
很抱歉没有提供更多帮助。
【讨论】:
【参考方案2】:我怀疑这些计时器中的任何一个都是 Qt 的一部分;这些计时器作为底层操作系统的 TCP/IP 实现的一部分存在。如果远程端没有响应,等待连接超时的套接字最终会变坏。如果发送的数据在合理的时间后未被确认,则相同。
然而,Qt 异步执行所有操作,并使用信号和槽在发生某些事情时通知您。这意味着如果您想缩短超时,最简单的方法是使用与您并行运行的QTimer
QAbstractSocket
,如果计时器在套接字发出响应信号之前超时,您可以采取适当的措施.
如果做不到这一点,可能会有一些套接字选项允许您根据自己的喜好设置 TCP 连接上的各种超时。
【讨论】:
以上是关于如何在 Qt 中修改 QWebsocket 定时器的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能将 QWebsocket::error SIGNAL 连接到 lambda 或具有相同签名的任何其他 SLOT 类型? QT5.9 [重复]