ホームページ  >  記事  >  PHPフレームワーク  >  Workerman クライアントが接続できない場合はどうすればよいですか?

Workerman クライアントが接続できない場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2019-12-12 14:19:154155ブラウズ

Workerman クライアントが接続できない場合はどうすればよいですか?

#workermanクライアントが接続できない場合はどうすればよいですか?

#クライアント接続失敗の原因

接続が失敗すると、クライアントは通常、接続拒否と接続タイムアウトという 2 つのエラーを報告します

接続拒否

# 通常、理由は次のとおりです:

1. クライアントが接続するポートが間違っています

2. クライアントが接続するドメイン名または IP が間違っています

3. クライアントが接続にドメイン名を使用する場合、ドメイン名は間違ったサーバー ip

4 を指している可能性があります。サーバーが起動していないか、ポートがは監視されていません

5. ネットワーク プロキシ ソフトウェアが使用されています

6. サーバー監視 IP とアクセス アドレスが同じアドレス セグメントにありません。たとえば、サーバーが 127.0.0.1 を監視している場合、クライアントは 127.0.0.1 を介してのみ接続でき、LAN IP または外部ネットワーク IP を介して接続することはできません。ローカル マシン、内部ネットワーク、および外部ネットワークが接続できるように、リスニング アドレスを 0.0.0.0 に設定することをお勧めします。

接続タイムアウト

これは通常、次の理由によるものです:

1. サーバーのファイアウォールが接続をブロックしています。ファイアウォールを一時的に閉じることができます。クラウド サーバーの場合は、セキュリティ グループによって接続の確立が妨げられる場合もあります。管理バックグラウンドで対応するポートを開く必要があります。

3.サーバーが存在しないか、起動していません。

4. クライアントが接続にドメイン名を使用する場合、ドメイン名が間違ったサーバー IP

5 を指している可能性があります。 client はサーバーのイントラネット IP であり、クライアントとサーバーは同じ LAN 内にありません

その他のエラー

発生したエラーが接続拒否および接続ではない場合1. クライアントが使用する通信プロトコルがサーバーと一致していません。

たとえば、サーバーは http 通信プロトコルを使用し、クライアントは WebSocket 通信プロトコルを使用して接続できません。クライアントが WebSocket プロトコルを使用して接続する場合、サーバーも WebSocket プロトコルを使用する必要があります。サーバーが http プロトコルのサービスの場合、クライアントは http プロトコルを使用してアクセスする必要があります。

ここでの原則は、イギリス人とコミュニケーションを取りたい場合は英語を使用するのと同じです。日本人とコミュニケーションを取りたいなら日本語を使いましょう。ここでの言語は通信プロトコルに似ており、双方 (クライアントとサーバー) が同じ言語を使用して通信する必要があり、そうでないと通信できません。

一貫性のない通信プロトコルによって発生する一般的なエラーは次のとおりです:

WebSocket connection to 'ws://xxx.com:xx/' failed: Error during WebSocket handshake: Unexpected response code: xxx
WebSocket connection to 'ws://xxx.com:xx/' failed: Error during WebSocket handshake: net::ERR_INVALID_HTTP_RESPONSE

解決策:

上記の 2 つのエラーから、クライアントが ws 接続と websocket プロトコルを使用していることがわかります。 。サーバーも WebSocket プロトコルを使用する必要があります。サーバー側のリスニング コードの一部では、たとえば次のように、通信する WebSocket プロトコルを指定する必要があります。

gatewayWorker の場合、コードのリスニング部分同様です

// websocket协议,这样客户端才能用ws://...来连。xxxx为端口不用改动
$gateway = new Gateway('websocket://0.0.0.0:xxxx');

ワーカーマンの場合は

// websocket协议,这样客户端才能用ws://...来连。xxxx为端口不用改动
$worker = new Worker('websocket://0.0.0.0:xxxx');

推奨:

ワーカーマン チュートリアル

以上がWorkerman クライアントが接続できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。