http://code.google.com/p/phpws/
説明
PHP 用の WebSocket サーバーおよびクライアント ライブラリ。最新の HyBi 仕様だけでなく、古い Chrome バージョンや一部の Flash フォールバック ソリューションで使用されている古い Hixie #76 仕様でも動作します。
このプロジェクトは、http://www.u2start.com/
ダウンロードにさらにインタラクティブな機能を提供するために開始されました。現在、ダウンロードはできません。ソースと簡単な例は、GIT リポジトリで入手できます (「ソース」タブを参照)。
機能サーバー
Hixie #76 および Hybi #12 プロトコル バージョン Flash クライアントのサポート (同じポートで XML ポリシー ファイルも提供) https://github.com を参照/gimite/web-socket-js 互換性のある Flash クライアントのネイティブ Firefox、Safari (iPod / iPhone も)、Chrome、IE10 のサポート。 Flash クライアントでは、Flash をサポートするすべてのブラウザも同様に動作します (IE6 ~ 9、Opera、Android、その他の古いデスクトップ ブラウザを含む)。 Opera (モバイル) は WebSocket をネイティブにサポートしていますが、サポートはデフォルトで無効になっています。 opera:config で有効にできます。クライアント
Hybi / Hixie76 のサポート。 既知の問題 SSL サポートはフィールドで十分にテストされていません。 ORIGIN チェックの欠如 (getHeaders() を使用して onConnect で手動で実装できます。Origin ヘッダーが気に入らない場合はユーザーを切断するだけです) HyBi 仕様の拡張データはサポートされていません。要件サーバー
PHP 5.3 サーバーのポートを開く 暗号化された接続でサーバーを実行するための PHP OpenSSL モジュールクライアント
HyBi (#8-#12) ドラフトバージョンを実装する PHP 5.3 サーバー SSL を使用して接続するための PHP OpenSSL モジュール(wss:// uris) サーバーの例#!/php -q<?php// Run from command prompt > php demo.phprequire_once("websocket.server.php");/** * This demo resource handler will respond to all messages sent to /echo/ on the socketserver below * * All this handler does is echoing the responds to the user * @author Chris * */class DemoEchoHandler extends WebSocketUriHandler{ public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg){ $this->say("[ECHO] {$msg->getData()}"); // Echo $user->sendMessage($msg); } public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $obj){ $this->say("[DEMO] Admin TEST received!"); $frame = WebSocketFrame::create(WebSocketOpcode::PongFrame); $user->sendFrame($frame); }}/** * Demo socket server. Implements the basic eventlisteners and attaches a resource handler for /echo/ urls. * * * @author Chris * */class DemoSocketServer implements IWebSocketServerObserver{ protected $debug = true; protected $server; public function __construct(){ $this->server = new WebSocketServer(0, 12345, 'superdupersecretkey'); $this->server->addObserver($this); $this->server->addUriHandler("echo", new DemoEchoHandler()); } public function onConnect(IWebSocketConnection $user){ $this->say("[DEMO] {$user->getId()} connected"); } public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg){ $this->say("[DEMO] {$user->getId()} says '{$msg->getData()}'"); } public function onDisconnect(IWebSocketConnection $user){ $this->say("[DEMO] {$user->getId()} disconnected"); } public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $msg){ $this->say("[DEMO] Admin Message received!"); $frame = WebSocketFrame::create(WebSocketOpcode::PongFrame); $user->sendFrame($frame); } public function say($msg){ echo "$msg \r\n"; } public function run(){ $this->server->run(); }}// Start server$server = new DemoSocketServer(0,12345);$server->run();
クライアントはサーバーほど興味深いものではなく、主にサーバーのテストに使用されます
<?php require_once("websocket.client.php"); $input = "Hello World!"; $msg = WebSocketMessage::create($input); $client = new WebSocket("ws://127.0.0.1:12345/echo/"); $client->sendMessage($msg); // Wait for an incoming message $msg = $client->readMessage(); $client->close(); echo $msg->getData(); // Prints "Hello World!" when using the demo.php server
?>