Swoole WebSocket實(shí)例

2019-08-14 19:13 更新

Swoole WebSocket介紹

swoole-1.7.9 增加了內(nèi)置的websocket服務(wù)器支持,通過(guò)幾行PHP代碼就可以寫(xiě)出一個(gè)異步非阻塞多進(jìn)程的WebSocket服務(wù)器。

常見(jiàn)使用場(chǎng)景:我們?cè)谑褂胮hp開(kāi)發(fā)的時(shí)候,原生最不好用的是socket類(lèi)庫(kù)了,而在開(kāi)發(fā)IM和及時(shí)通信項(xiàng)目是,我們現(xiàn)在有了新的選擇后端使用php Swoole WebSocket + 前端 html5 WebSocket;

簡(jiǎn)單實(shí)例:

$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();

onRequest回調(diào)

swoole_websocket_server 繼承自 swoole_http_server

  • 設(shè)置了onRequest回調(diào),websocket服務(wù)器也可以同時(shí)作為http服務(wù)器
  • 未設(shè)置onRequest回調(diào),websocket服務(wù)器收到http請(qǐng)求后會(huì)返回http 400錯(cuò)誤頁(yè)面

客戶(hù)端

  • Chrome/Firefox/高版本IE/Safari等瀏覽器內(nèi)置了JS語(yǔ)言的WebSocket客戶(hù)端
  • 異步的PHP程序中可以使用Swoole\Http\Client作為WebSocket客戶(hù)端
  • apache/php-fpm或其他同步阻塞的PHP程序中可以使用swoole/framework提供的同步WebSocket客戶(hù)端
  • 非WebSocket客戶(hù)端不能與WebSocket服務(wù)器通信
甚至你還可以結(jié)合使用socket.io來(lái)配合開(kāi)發(fā)
以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)