インターネット上にある例は、おそらく次のような処理フローになっています:
ソケット_create //Connect
socket_bind //Bind
socket_listen //Listen
do {
if (receivesocket_accept connection)
{
socket_read //受信した情報の読み取り
socket_write // 応答情報を返します
}
ソケット_クローズ // 接続を閉じます
} while(true)
リクエストを受信したら、受信した情報を読み取り、応答して接続を閉じます。応答した後。
(サンプルコードから上記の処理フローを誤解した可能性があります)
この例でテストした結果、問題は次のとおりであることがわかりました。この例では、クライアントが長い接続を維持できるようには見えません。リクエストを受信すると、送信された情報を読み取って応答します。応答後、接続は閉じられます。」
php ソケットの長い接続を使用した複数の往復通信の実装プロセスについてアドバイスをいただければ幸いです。またはチュートリアルや例を提供してください
ループに入っていない場合は、socket_close // 接続を閉じるだけでは十分ではないでしょうか?
ループsocket_close //内で接続を閉じないようにしてみましたが、それでもクライアントから2番目のメッセージを受信できません。 関連コード:
do { if (($msgsock = socket_accept($sock)) === false) {//得到一个链接 echo "套接字接收失败,原因:".socket_strerror(socket_last_error($sock)) . "\n"; break; } echo '阅读客户端消息\n'; $buf = strlen(socket_read($msgsock, 8192)); $talkback = "客户端说:$buf\n"; $talkback = "服务器端说:好啊\n"; flush(); if (false === socket_write($msgsock, $talkback, strlen($talkback))) { echo "套接字写失败,原因:" . socket_strerror(socket_last_error($sock)) ."\n"; } else { echo '发送成功'; } //socket_close($msgsock); //flush();} while(true);
なぜ自分でphpソケットサーバーを作成する必要があるのですか? Workerman ソケット サーバー フレームワークを使用します。長いリンクか短いリンクかは設定フィールドの問題であり、安定していて、パフォーマンスが高く、最も重要なことはシンプルです
if (($msgsock = socket_accept($sock)) === false){ echo "套接字接收失败,原因:".socket_strerror(socket_last_error($sock)) . "\n"; break;}do { echo '阅读客户端消息\n'; $buf = strlen(socket_read($msgsock, 8192)); $talkback = "客户端说:$buf\n"; $talkback = "服务器端说:好啊\n"; flush(); if (false === socket_write($msgsock, $talkback, strlen($talkback))) { echo "套接字写失败,原因:" . socket_strerror(socket_last_error($sock)) ."\n"; } else { echo '发送成功'; } //socket_close($msgsock); //flush();} while(true);
すぐに別のリクエストを送信できます