来自 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 带有源代码是有原因的:你应该在它有意义的时候使用它!
我已经使用 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 带有源代码是有原因的:你应该在它有意义的时候使用它!