首頁  >  文章  >  php框架  >  swoole各種伺服器區別

swoole各種伺服器區別

(*-*)浩
(*-*)浩原創
2019-12-16 10:05:002712瀏覽

swoole各種伺服器區別

server.php                               )

//创建Server对象,监听 127.0.0.1:9501端口
$serv = new Swoole\Server("127.0.0.1", 9501); 
//监听连接进入事件
$serv->on('Connect', function ($serv, $fd) {  
    echo "Client: Connect.\n";
});
//监听数据接收事件
$serv->on('Receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, "Server: ".$data);
});
//监听连接关闭事件
$serv->on('Close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
//启动服务器
$serv->start();

這裡就建立了一個TCP伺服器,監聽本機9501埠。

它的邏輯很簡單,當客戶端Socket透過網路傳送一個 hello 字串時,伺服器會回覆一個 Server: hello 字串。 Server是非同步伺服器,所以是透過監聽事件的方式來寫程式的。當對應的事件發生時底層會主動回呼指定的函數。如有新的TCP連線進入時會執行onConnect事件回調,當某個連線向伺服器傳送資料時會回呼onReceive函數。

UDP伺服器與TCP伺服器不同,UDP沒有連線的概念。

啟動Server後,客戶端無需Connect,直接可以向Server監聽的9502連接埠傳送封包。對應的事件為onPacket。 $clientInfo是客戶端的相關訊息,是一個數組,有客戶端的IP和連接埠等內容調用 $server->sendto 方法向客戶端發送資料

#Http伺服器只需要關注請求回應即可,所以只需要監聽一個onRequest事件。

當有新的Http請求進入就會觸發此事件。事件回調函數有2個參數,一個是$request對象,包含了請求的相關訊息,如GET/POST請求的資料。 另外一個是response對象,對request的回應可以透過操作response物件來完成。 $response->end()方法表示輸出一段HTML內容,並結束此請求。

0.0.0.0 表示監聽所有IP位址,一台伺服器可能同時有多個IP,如127.0.0.1本地回環IP、192.168.1.100區域網路IP、210.127.20.2 外網路IP,這裡也可以單獨指定監聽一個IP9501 監聽的端口,如果被佔用程式會拋出致命錯誤,中斷執行。

WebSocket伺服器是建立在Http伺服器之上的長連線伺服器,客戶端首先會發送一個Http的請求與伺服器進行握手。

握手成功後會觸發onOpen事件,表示連接已就緒,onOpen函數中可以得到$request對象,包含了Http握手的相關信息,如GET參數、Cookie、Http頭信息等。

建立連線後客戶端與伺服器端就可以雙向通訊了。

客戶端傳送訊息到伺服器端時,伺服器端觸發onMessage事件回呼伺服器端可以呼叫$server->push()向某個客戶端(使用$fd識別碼)傳送訊息伺服器端可以設定onHandShake事件回呼來手動處理WebSocket握手。

swoole_http_server是swoole_server的子類,內建了Http的支援swoole_websocket_server是swoole_http_server的子類, 內建了WebSocket的支援

以上是swoole各種伺服器區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn