10

サーバーへの定数ajaxリクエストを置き換えるためにwebsocketを使用しようとしています。これにより、ajax情報が更新されます。

クライアントサーバーシナリオで私が知っている限り、コマンドラインからphpwebsocketサーバーを起動する必要があります。

php -q myserver.php

私が取得しようとしているのは、クライアントが初めて接続するときにサーバーを起動し、コマンドラインを使用せずにこのサーバーを他のすべてのクライアントに使用することです。

var socket = new WebSocket("ws://localhost:10000/myserver.php");

このコマンドサーバーが実行されていない場合はサーバーを実行し、このクライアントの接続を開きます。

これは可能ですか?

4

1 に答える 1

4

はい、可能ですが、phpwebsocketを確認する必要があります

var host = "ws://localhost:10000/myserver.php";
try{
  socket = new WebSocket(host);
  log('WebSocket - status '+socket.readyState);
  socket.onopen    = function(msg){ log("Welcome - status "+this.readyState); };
  socket.onmessage = function(msg){ log("Received: "+msg.data); };
  socket.onclose   = function(msg){ log("Disconnected - status "+this.readyState); };
}
catch(ex){ log(ex); }

実行するサーバー側php -q myserver.php

log("Handshaking...");
list($resource,$host,$origin) = getheaders($buffer);
$upgrade = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n" .
        "Upgrade: WebSocket\r\n" .
        "Connection: Upgrade\r\n" .
        "WebSocket-Origin: " . $origin . "\r\n" .
        "WebSocket-Location: ws://" . $host . $resource . "\r\n" .
        "\r\n";
$handshake = true;
socket_write($socket,$upgrade.chr(0),strlen($upgrade.chr(0)));

phpwebsocket はデフォルトではサポートされていないためRFC-6455、以下も参照してください。

于 2012-10-15T11:15:35.130 に答える