1

私は、WebSocket を含む Web 開発プロジェクトに取り組んでいます。wampサーバーを使用して、ローカルサーバーですべて問題ありません。

オンラインで問題が発生しました。専用サーバーは websocket 用に適切に構成されており (php 拡張機能が有効になっています)、問題なくサーバーを実行できます。

それでも接続は失敗し、クライアントは接続できません。これはポートやファイアウォールの問題ではなく、クライアントはサーバーにアクセスできますが、ハンドシェイクは未完了のままです。

私はPHPWebSocketを使用します:

Web サーバーでの Websockets の展開に関するドキュメントは多くありませんが、ローカルでは一般的に問題なく動作します。

誰かが同じ問題に遭遇した場合、または何が問題なのかを知っている場合...

4

1 に答える 1

0

問題が解決しました

PHPwebsocket は ID を使用して、クライアントと関連するソケットを区別します。

したがって、$this->read には、いくつかのカップルがあります。

clientID => ソケット

問題はそこにあります。関数 socket_select は id を気にしません。したがって、実装に応じて...

ローカル (Windows)

入力:

{
0 => ressource #5,
1 => ressource #6
}

出力:

{
**1** => ressource #6
}

オンライン (Debian)

入力:

{
0 => ressource #5,
1 => ressource #6
}

出力:

{
**0** => ressource #6
}

2 番目のケースでは関係が保持されなくなり、残りのプロセスで問題が発生します。

この問題を解決するために、再定義された id にループを追加します。

foreach($this->wsRead as $id => $socket2){
    if($socket2 ==$socket)
    $clientID = $id;
    }

ループの後、$clientID が正しい値に設定されます。

于 2012-06-14T10:57:40.293 に答える