来自 QTcpSocket 的 QWebSocket

QWebSocket from QTcpSocket

我已经使用 QTcpServer 等编写了一个小型 Web 服务器...它工作正常所以我想更进一步并实现 Qt 的 WebSocket 功能。我希望 WebSocket-Server 可以在与我的网络服务器相同的端口上访问(由于我的客户端网络的限制)。

我的 WebSocket-Server 应该可以在 /admin/socket 访问,所以我需要一种方法来 'upgrade' 一个 QTcpSocket (可从/admin/socket) 的请求处理程序到 QWebSocket。 QWebSocket 在 QWebSocketServerPrivate 的 this constructor which is used by this 升级方法中具有此功能,但它都是私有的,仅供 QWebSocketServer 内部使用。

有没有办法实现我上面描述的?我必须实现自己的 WebSocket 处理程序吗?

您需要将必要的文件从 Qt 的源代码复制到您的项目中,将 QWebSocket 包装到一个命名空间中,这样它就不会与 Qt 自己的命名空间发生冲突,并使构造函数成为非私有的。这是实现这一目标的唯一方法,无需编写大量您自己的代码,也无需调用未定义的行为。

要使用您的类型,请通过 using 使其可见;它将隐藏 Qt 的 ::QObject 然后:

#include <QtCore>

namespace Foo { class QObject {}; }

int main() {
   using Foo::QObject;

   //         ours vvvvvvv        Qt's vvvvvvv
   Q_ASSERT(sizeof(QObject) < sizeof(::QObject));
}

Qt 带有源代码是有原因的:你应该在它有意义的时候使用它!