クライアント WebSocket が PHP ソケットに接続できない問題
この投稿の最終編集者は d6965921d 2014-07-16 10:25:53 私のクライアントは WebSocket を書き込むために c を使用しています
クライアントから要求したアドレスは ws://127.0.0.1:100322 (ws://echo.websocket.org を要求しました。これは OK であり、クライアント コードが正常であることを示しています。問題はサーバー側にあります) )
出力
[1405476678:7805] NOTICE: 初期ログレベル 7
[1405476678:7806] NOTICE: ライブラリバージョン: 1.3 1544a2a
[1405476678:7806] NOTICE: デーモン pid 0[1405476678: 7806] 注意: 静的割り当て: 4436 (12 x 256 fds) = 7508 バイト
[1405476678:8329] 警告: ヘッダーの解析の問題
PHP 書き込みソケット
<br /><?php<br />error_reporting(E_ALL);<br />set_time_limit(0);<br />//ob_implicit_flush();<br /> <br />$address = '127.0.0.1';<br />$port = 100322;<br />//创建端口<br />if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {<br /> echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "\n";<br />}<br /> <br />//绑定<br />if (socket_bind($sock, $address, $port) === false) {<br /> echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";<br />}<br /> <br />//监听<br />if (socket_listen($sock, 5) === false) {<br /> echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";<br />}<br /> <br />do {<br /> //得到一个链接<br /> if (($msgsock = socket_accept($sock)) === false) {<br /> echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n";<br /> break;<br /> }<br /> //welcome 发送到客户端<br /> $msg = "<font color='red'>server send:welcome</font><br/>";<br /> socket_write($msgsock, $msg, strlen($msg));<br /> echo 'read client message\n';<br /> $buf = socket_read($msgsock, 8192);<br /> $talkback = "received message:$buf\n";<br /> echo $talkback;<br /> if (false === socket_write($msgsock, $talkback, strlen($talkback))) {<br /> echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."\n";<br /> } else {<br /> echo 'send success';<br /> }<br /> socket_close($msgsock);<br />} while(true);<br />//关闭socket<br />socket_close($sock);<br /> <br /> <br />?><br />
ログイン後にコピー
以下は、クライアントからサーバーへの出力です PHP ソケット
192:socket apple$ phpindex.php
read client messagegenreceived message:GET / HTTP/1.1
プラグマ: no-cache
キャッシュ制御: no-cache
ホスト: 127.0.0.1
アップグレード: websocket
接続: アップグレード
Sec-WebSocket-Key: nfvpsG0kAZkYrfZQkptpUA==
Origin: 127.0.0.1
Sec-WebSocket-Protocol:default-protocol
Sec-WebSocket-Extensions: deflate-frame
Sec-WebSocket-Version: 13
送信成功
-----解決策---------
あなたのphp WebSocket ハンドシェイクを完了するには、WebSocket プロトコルの関連ドキュメントを読むか、他の人がそのプロトコルをどのように作成したかを参照することをお勧めします。たとえば、次のコードには WebSocket ハンドシェイクと WebSocket メッセージの送信が含まれています
。 https://github.com/walkor/workerman-chat/blob/master/applications/Chat/Event.php