QWebSocketServer Class
WebSocketベースのサーバーを実装します。詳細...
Header: | #include <QWebSocketServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS WebSockets) target_link_libraries(mytarget PRIVATE Qt6::WebSockets) |
qmake: | QT += websockets |
Inherits: | QObject |
パブリック型
enum | SslMode { SecureMode, NonSecureMode } |
パブリック関数
QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr) | |
virtual | ~QWebSocketServer() override |
void | close() |
QWebSocketProtocol::CloseCode | error() const |
QString | errorString() const |
void | handleConnection(QTcpSocket *socket) const |
std::chrono::milliseconds | handshakeTimeout() const |
int | handshakeTimeoutMS() const |
bool | hasPendingConnections() const |
bool | isListening() const |
bool | listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0) |
int | maxPendingConnections() const |
virtual QWebSocket * | nextPendingConnection() |
void | pauseAccepting() |
QNetworkProxy | proxy() const |
void | resumeAccepting() |
QWebSocketServer::SslMode | secureMode() const |
QHostAddress | serverAddress() const |
QString | serverName() const |
quint16 | serverPort() const |
QUrl | serverUrl() const |
void | setHandshakeTimeout(std::chrono::milliseconds msec) |
void | setHandshakeTimeout(int msec) |
void | setMaxPendingConnections(int numConnections) |
void | setProxy(const QNetworkProxy &networkProxy) |
void | setServerName(const QString &serverName) |
bool | setSocketDescriptor(qintptr socketDescriptor) |
void | setSslConfiguration(const QSslConfiguration &sslConfiguration) |
(since 6.4) void | setSupportedSubprotocols(const QStringList &protocols) |
qintptr | socketDescriptor() const |
QSslConfiguration | sslConfiguration() const |
(since 6.4) QStringList | supportedSubprotocols() const |
QList<QWebSocketProtocol::Version> | supportedVersions() const |
シグナル
void | acceptError(QAbstractSocket::SocketError socketError) |
(since 6.2) void | alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
(since 6.2) void | alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description) |
void | closed() |
(since 6.2) void | handshakeInterruptedOnError(const QSslError &error) |
void | newConnection() |
void | originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator) |
void | peerVerifyError(const QSslError &error) |
void | preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator) |
void | serverError(QWebSocketProtocol::CloseCode closeCode) |
void | sslErrors(const QList<QSslError> &errors) |
詳細説明
QWebSocketServer はQTcpServer をモデルにしており、同じように動作します。そのため、QTcpServer の使い方を知っていれば、QWebSocketServer の使い方を知っていることになります。このクラスは、着信する WebSocket 接続を受け付けることができます。ポートを指定することも、QWebSocketServer に自動的に選択させることもできます。特定のアドレスでリッスンすることも、すべてのマシンのアドレスでリッスンすることもできます。listen() を呼び出すと、サーバーは着信接続をリッスンします。
newConnection() シグナルは、クライアントがサーバに接続するたびに発行されます。nextPendingConnection() を呼び出すと、保留中の接続がQWebSocket に接続されたことになる。この関数は、クライアントとの通信に使用できるQAbstractSocket::ConnectedState のQWebSocket へのポインタを返します。
エラーが発生した場合、serverError() はエラーのタイプを返し、errorString() を呼び出すと、何が発生したかを人間が読める形で説明することができる。
接続をリッスンしている場合、サーバーがリッスンしているアドレスとポートは、serverAddress() およびserverPort() として取得できます。
close() を呼び出すと、QWebSocketServer は着信接続のリッスンを停止します。
QWebSocketServer は現在WebSocket Extensions をサポートしていません。
注意: 自己署名証明書を使用している場合、Firefox のバグ 594502によって安全な WebSocket サーバーに接続できません。この問題を回避するには、まずHTTPSを使用して安全なWebSocketサーバーをブラウズします。FireFoxは証明書が無効であることを示します。ここから、証明書を例外に追加することができます。これで、セキュアなWebSocket接続が機能するようになります。
QWebSocketServerは、RFC 6455で概説されているWebSocketプロトコルのバージョン13のみをサポートしています。
サービス拒否を回避するため、デフォルトの接続ハンドシェイクタイムアウトは 10 秒です。これはsetHandshakeTimeout() を使用してカスタマイズできます。
WebSocket Server ExampleおよびQWebSocketも参照 。
メンバータイプ ドキュメント
enum QWebSocketServer::SslMode
サーバが wss (SecureMode) と ws (NonSecureMode) のどちらで動作するかを示す。
定数 | 値 | 説明 |
---|---|---|
QWebSocketServer::SecureMode | 0 | サーバがセキュアモードで動作している (wss 経由) |
QWebSocketServer::NonSecureMode | 1 | サーバは非セキュアモード(ws経由)で動作します。 |
メンバ関数ドキュメント
[explicit]
QWebSocketServer::QWebSocketServer(const QString &serverName, QWebSocketServer::SslMode secureMode, QObject *parent = nullptr)
与えられたserverName で新しい QWebSocketServer を構築します。serverName は HTTP ハンドシェイクフェーズでサーバを識別するために使用されます。この場合、サーバ名はクライアントに送信されません。secureMode パラメータは、サーバが wss (SecureMode) と ws (NonSecureMode) のどちらで動作するかを示します。
parent は コンストラクタに渡されます。QObject
[override virtual noexcept]
QWebSocketServer::~QWebSocketServer()
QWebSocketServer オブジェクトを破棄します。サーバが接続をリッスンしている場合、ソケットは自動的に閉じられます。まだキューに入っているクライアントQWebSocketはすべて閉じられ、削除される。
close()も参照 。
[signal]
void QWebSocketServer::acceptError(QAbstractSocket::SocketError socketError)
このシグナルは、新しい接続の受け付けがエラーになった場合に発行される。socketError パラメータには、発生したエラーのタイプが記述される。
pauseAccepting() およびresumeAccepting() も参照 。
[signal, since 6.2]
void QWebSocketServer::alertReceived(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QWebSocketServer level は、アラートが致命的なものであったか、警告であったかを示す。 は、アラートが送信された理由を説明するコードである。アラートメッセージのテキストによる説明がある場合は、 。type description
注意: このシグナルは主に情報提供とデバッグのためのもので、アプリケーションで処理する必要はありません。アラートが致命的であった場合、基礎となるバックエンドはそれを処理し、接続を閉じます。
注意: 全てのバックエンドがこの機能をサポートしているわけではありません。
この関数は Qt 6.2 で導入されました。
alertSent()、QSsl::AlertLevel 、QSsl::AlertTypeも参照してください 。
[signal, since 6.2]
void QWebSocketServer::alertSent(QSsl::AlertLevel level, QSsl::AlertType type, const QString &description)
QWebSocketServer level 、警告か致命的なエラーかを記述します。 、警告メッセージのコードを示します。アラートメッセージのテキスト記述がある場合は、 で提供される。type description
注意: このシグナルはほとんどが情報提供であり、デバッグ目的で使用することができます。
注意: すべてのバックエンドがこの機能をサポートしているわけではありません。
この関数は Qt 6.2 で導入されました。
alertReceived()、QSsl::AlertLevel 、QSsl::AlertTypeも参照してください 。
void QWebSocketServer::close()
サーバを閉じます。サーバはもう着信を待ちません。
[signal]
void QWebSocketServer::closed()
このシグナルは、サーバーが接続をクローズしたときに発行されます。
close()も参照 。
QWebSocketProtocol::CloseCode QWebSocketServer::error() const
最後に発生したエラーのエラー・コードを返します。エラーが発生しなかった場合は、QWebSocketProtocol::CloseCodeNormal が返される。
errorString() も参照 。
QString QWebSocketServer::errorString() const
最後に発生したエラーについて、人間が読める説明を返します。エラーが発生しなかった場合は、空の文字列が返されます。
serverError()も参照 。
void QWebSocketServer::handleConnection(QTcpSocket *socket) const
tcpsocket を websocket にアップグレードします。
QWebSocketServer オブジェクトがソケットオブジェクトの所有権を持ち、適切な場合に削除する。
[signal, since 6.2]
void QWebSocketServer::handshakeInterruptedOnError(const QSslError &error)
QWebSocketServer 証明書検証 が見つかり、かつ で早期エラー報告が有効になっている場合、このシグナルを発する。error QSslConfiguration
この関数は Qt 6.2 で導入されました。
sslErrors() およびQSslConfiguration::setHandshakeMustInterruptOnError()も参照のこと 。
std::chrono::milliseconds QWebSocketServer::handshakeTimeout() const
新規接続のハンドシェイクタイムアウトをミリ秒単位で返します。
デフォルトは10秒です。ピアがハンドシェイクの完了にそれ以上の時間を使った場合、その接続はクローズされます。
setHandshakeTimeout() およびhandshakeTimeoutMS()も参照 。
int QWebSocketServer::handshakeTimeoutMS() const
新規接続のハンドシェイクタイムアウトをミリ秒単位で返します。
デフォルトは 10 秒。ピアがハンドシェイクの完了にそれ以上の時間を使った場合、そのコネクションはクローズされます。
setHandshakeTimeout() およびhandshakeTimeout()も参照 。
bool QWebSocketServer::hasPendingConnections() const
サーバが保留中の接続を持っている場合は true を返し、そうでない場合は false を返します。
nextPendingConnection() およびsetMaxPendingConnections() も参照 。
bool QWebSocketServer::isListening() const
サーバが現在接続を待ち受け中の場合は true を返し、そうでない場合は false を返します。リスニングに失敗した場合は、error() がその理由を返す。
bool QWebSocketServer::listen(const QHostAddress &address = QHostAddress::Any, quint16 port = 0)
アドレスaddress およびポートport で着信接続を待ち受けるようにサーバに指示します。port が 0 の場合、ポートは自動的に選択される。address がQHostAddress::Any の場合、サーバはすべてのネットワーク・インタフェースをリッスンします。
成功するとtrueを返し、失敗するとfalseを返します。
isListening()も参照 。
int QWebSocketServer::maxPendingConnections() const
保留中の接続の最大受付数を返します。デフォルトは 30 である。
setMaxPendingConnections() およびhasPendingConnections() も参照 。
[signal]
void QWebSocketServer::newConnection()
このシグナルは、新しい接続が利用可能になるたびに発行されます。
hasPendingConnections() およびnextPendingConnection() も参照 。
[virtual]
QWebSocket *QWebSocketServer::nextPendingConnection()
QWebSocket QWebSocketServer は、返された オブジェクトの所有権を持たない。オブジェクトが使用されなくなったときに明示的に削除するのは、呼び出し元の責任です。そうしないと、メモリ・リークが発生します。保留中の接続がないときにこの関数が呼び出されると、nullptrが返されます。QWebSocket
注意:返されたQWebSocket オブジェクトは、他のスレッドから使用することはできない。
hasPendingConnections()も参照のこと 。
[signal]
void QWebSocketServer::originAuthenticationRequired(QWebSocketCorsAuthenticator *authenticator)
このシグナルは、新しい接続が要求されたときに発せられる。このシグナルに接続されているスロットは、authenticator オブジェクトで(setAllowed()を発行することで)オリジン(origin()呼び出しで決定できる)が許可されているかどうかを示す必要がある。
このシグナルにスロットが接続されていない場合、デフォルトですべてのオリジンが許可される。
注意: QueuedConnectionを使用してこのシグナルに接続することはできない。
void QWebSocketServer::pauseAccepting()
新しいコネクションの着信を一時停止します。キューに入れられた接続はキューに残ります。
resumeAccepting()も参照 。
[signal]
void QWebSocketServer::peerVerifyError(const QSslError &error)
QWebSocketServer は、SSLハンドシェイク中、暗号化が確立する前にこのシグナルを何度か発して、相手のIDを確立する際にエラーが発生したことを示すことができます。 は通常、 がピアを安全に識別できないことを示す。error QWebSocketServer
このシグナルは、何か問題が発生したときに、その兆候を早期に示してくれる。このシグナルに接続することで、ハンドシェイクが完了する前に、接続されたスロットの内部から手動で接続を切断することを選択できる。何もアクションを起こさなければ、QWebSocketServer はQWebSocketServer::sslErrors() の発信に進む。
sslErrors()も参照のこと 。
[signal]
void QWebSocketServer::preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator *authenticator)
QWebSocketServer は、PSK暗号化方式をネゴシエートするときにこのシグナルを発するため、 PSK認証が必要となる。
PSKを使う場合、クライアントはSSLハンドシェイクを続けるために、有効なIDと有効な事前共有鍵をサーバーに送らなければならない。アプリケーションはこのシグナルに接続されたスロットに、渡されたauthenticator オブジェクトを必要に応じて入力することで、この情報を提供することができます。
注意: このシグナルを無視したり、必要な認証情報を提供しなかったりすると、ハンドシェイクが失敗し、接続が中断されます。
注意 :authenticator オブジェクトはソケットが所有するので、アプリケーションから削除してはならない。
QSslPreSharedKeyAuthenticator およびQSslSocket::preSharedKeyAuthenticationRequired()も参照 。
QNetworkProxy QWebSocketServer::proxy() const
このサーバーのネットワークプロキシを返す。デフォルトではQNetworkProxy::DefaultProxy が使用される。
setProxy()も参照 。
void QWebSocketServer::resumeAccepting()
新しい接続の受け付けを再開します。
pauseAccepting()も参照 。
QWebSocketServer::SslMode QWebSocketServer::secureMode() const
サーバが実行中のセキュアモードを返します。
QWebSocketServer() およびSslMode も参照 。
QHostAddress QWebSocketServer::serverAddress() const
サーバが接続をリッスンしている場合はサーバのアドレスを返し、そうでない場合はQHostAddress::Null を返します。
serverPort() およびlisten()も参照 。
[signal]
void QWebSocketServer::serverError(QWebSocketProtocol::CloseCode closeCode)
このシグナルは、WebSocket 接続のセットアップ中にエラーが発生した場合に発行されます。closeCode パラメータには、発生したエラーのタイプが記述されます。
errorString()も参照 。
QString QWebSocketServer::serverName() const
http handshake フェーズで使用するサーバー名を返します。
setServerName() も参照 。
quint16 QWebSocketServer::serverPort() const
サーバが接続をリッスンしている場合はサーバのポートを返し、そうでない場合は 0 を返します。
serverAddress() およびlisten() も参照 。
QUrl QWebSocketServer::serverUrl() const
サーバが接続を受け付けている場合は、クライアントがこのサーバに接続するための URL を返します。それ以外の場合は、無効な URL を返します。
serverPort()、serverAddress() およびlisten() も参照 。
void QWebSocketServer::setHandshakeTimeout(std::chrono::milliseconds msec)
新規接続のハンドシェーク・タイムアウトをmsec ミリ秒に設定する。
デフォルトでは10秒に設定されている。ピアがハンドシェイクの完了にそれ以上の時間を使った場合、その接続は閉じられます。タイムアウトを無効にするには、負の値 (-1 など) を渡します。
handshakeTimeout() およびhandshakeTimeoutMS()も参照の こと。
void QWebSocketServer::setHandshakeTimeout(int msec)
これはオーバーロードされた関数である。
void QWebSocketServer::setMaxPendingConnections(int numConnections)
numConnections WebSocketServer は、 () が呼び出される前に を超える着信接続を受け付けない。デフォルトでは、保留中の接続数の上限は30である。nextPendingConnection numConnections
QWebSocketServer 最大接続数に達すると、 close コードとともに () シグナルが発行されます。WebSocket のハンドシェイクは失敗し、ソケットはクローズされる。QWebSocketProtocol::CloseCodeAbnormalDisconnection error
maxPendingConnections() およびhasPendingConnections()も参照 。
void QWebSocketServer::setProxy(const QNetworkProxy &networkProxy)
このサーバの明示的なネットワーク・プロキシをnetworkProxy に設定する。
プロキシの使用を無効にするには、QNetworkProxy::NoProxy プロキシ・タイプを使用します:
server->setProxy(QNetworkProxy::NoProxy);
proxy()も参照して ください。
void QWebSocketServer::setServerName(const QString &serverName)
HTTP ハンドシェーク・フェーズで使用されるサーバ名を指定されたserverName に設定します。serverName この場合、空のサーバ名がクライアントに送信されます。既に接続しているクライアントにはこの変更は通知されず、 新たに接続したクライアントにのみこの新しい名前が通知されます。
serverName()も参照のこと 。
bool QWebSocketServer::setSocketDescriptor(qintptr socketDescriptor)
このサーバがsocketDescriptor への着信接続を待ち受ける際に使用するソケットディスクリプタを設定する。
ソケットの設定に成功した場合は true を返し、失敗した場合は false を返す。ソケットはリッスン中であると仮定される。
socketDescriptor() およびisListening()も参照 。
void QWebSocketServer::setSslConfiguration(const QSslConfiguration &sslConfiguration)
QWebSocketServer の SSL 設定をsslConfiguration に設定する。QWebSocketServer が非セキュアモード(QWebSocketServer::NonSecureMode)で動作している場合、このメソッドは無効である。
sslConfiguration() およびSslModeも参照してください 。
[since 6.4]
void QWebSocketServer::setSupportedSubprotocols(const QStringList &protocols)
サーバがサポートするプロトコルのリストをprotocols に設定します。
この関数は Qt 6.4 で導入されました。
supportedSubprotocols() も参照の こと。
qintptr QWebSocketServer::socketDescriptor() const
サーバが着信命令をリッスンするために使用するネイティブソケットディスクリプターを返す。サーバがQNetworkProxy を使用している場合、返されたディスクリプタはネイティブソケット関数で使用できない可能性がある。
setSocketDescriptor() およびisListening()も参照のこと 。
QSslConfiguration QWebSocketServer::sslConfiguration() const
QWebSocketServerサーバがセキュアモード(QWebSocketServer::SecureMode)で動作していない場合、このメソッドはQSslConfiguration::defaultConfiguration()を返す。
setSslConfiguration()、SslMode 、およびQSslConfiguration::defaultConfiguration()も参照 。
[signal]
void QWebSocketServer::sslErrors(const QList<QSslError> &errors)
QWebSocketServer は、SSL ハンドシェイクの後にこのシグナルを発行し、ピアの ID を確立する際に 1 つ以上のエラーが発生したことを示す。エラーは通常、 がピアを安全に識別できないことを示す。何らかの処置が取られない限り、このシグナルが発せられた後、接続は切断されます。QWebSocketServer
errors には、 がピアの ID を確認できないエラーが 1 つ以上含まれている。QSslSocket
peerVerifyError()も参照のこと 。
[since 6.4]
QStringList QWebSocketServer::supportedSubprotocols() const
サーバがサポートしているプロトコルのリストを返します。
この関数は Qt 6.4 で導入されました。
setSupportedSubprotocols()も参照して ください。
QList<QWebSocketProtocol::Version> QWebSocketServer::supportedVersions() const
このサーバーがサポートしている WebSocket のバージョンのリストを返します。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。