WebSocket(ws)是html5新增加的一種通訊協議,目前流行的瀏覽器都支援這個協議,例如Chrome,Safrie,Firefox,Opera ,IE等等,對該協議支持最早的應該是chrome,從chrome12就已經開始支持,隨著協議草案的不斷變化,各個瀏覽器對協議的實現也在不停的更新。 (推薦學習: swoole視訊教學)
swoole 1.7.9增加了內建的WebSocket伺服器支持,透過幾行PHP程式碼就可以寫出一個非同步非阻塞多進程的WebSocket伺服器。
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501); $server->on('open', function (Swoole\WebSocket\Server $server, $request) { echo "server: handshake success with fd{$request->fd}\n"; }); $server->on('message', function (Swoole\WebSocket\Server $server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "this is server"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->start();
WebSocket伺服器除了接收Swoole\Server和Swoole\Http\Server基底類別的回呼函數外,額外增加了3個回呼函數設定。 其中:
onMessage回呼函數為必選
onOpen和onHandShake回呼函數為可選
WebSocket\Server是Server的子類,因此可以呼叫Server的全部方法。
需要注意WebSocket伺服器向客戶端發送資料應使用WebSocket\Server::push方法,此方法會進行WebSocket協定打包。而Server::send方法是原始的TCP發送介面。
WebSocket\Server::disconnect方法可以從服務端主動關閉一個WebSocket連接,可以指定狀態碼(根據WebSocket協議,可使用的狀態碼為十進制的一個整數,取值可以是1000或4000 -4999)和關閉原因(採用utf-8編碼、位元組長度不超過125的字串)。
在未指定情況下狀態碼為1000,關閉原因為空
以上是swoole如何打開ws的詳細內容。更多資訊請關注PHP中文網其他相關文章!