1

QTcpServer などを使用して小さな Web サーバーを作成しました。問題なく動作するので、もう少し進んで Qt の WebSocket 機能を実装したいと思いました。WebSocket サーバーが Web サーバーと同じポートで到達できるようにしたい (クライアント ネットワークの制限のため)。

私の WebSocket-Server は でアクセスできるはずなので、 QTcpSocket (のリクエストハンドラからアクセス可能)QWebSocket/admin/socketに「アップグレード」する方法が必要です。QWebSocket は、QWebSocketServerPrivate のこのアップグレード メソッドによって使用されるこのコンストラクターにこの機能を備えていますが、それはすべてプライベートであり、QWebSocketServer によって内部的にのみ使用されます。 /admin/socket

私が上で説明したことを達成する方法はありますか?独自の WebSocket ハンドラを実装する必要がありますか?

4

1 に答える 1

2

必要なファイルを 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 にソース コードが付属しているのには理由があります。

于 2016-04-01T18:56:45.353 に答える