【swoole快速入門1】建立tcp伺服器
阿新 • • 發佈:2018-12-10
程式程式碼
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
字串。
swoole_server是非同步伺服器,所以是通過監聽事件的方式來編寫程式的。當對應的事件發生時底層會主動回撥指定的PHP函式。如當有新的TCP連線進入時會執行onConnect事件回撥,當某個連線向伺服器傳送資料時會回撥onReceive函式。
- 伺服器可以同時被成千上萬個客戶端連線,$fd就是客戶端連線的唯一識別符號
- 呼叫
$server->send()
方法向客戶端連線傳送資料,引數就是$fd客戶端識別符號 - 呼叫
$server->close()
方法可以強制關閉某個客戶端連線 - 客戶端可能會主動斷開連線,此時會觸發onClose事件回撥
執行程式
php server.php
在命令列下執行server.php程式,啟動成功後可以使用 netstat
工具看到,已經在監聽9501埠。這時就可以使用telnet/netcat工具連線伺服器。
telnet 127.0.0.1 9501
hello
Server: hello
無法連線到伺服器的簡單檢測手段
- 在
Linux
下,使用netstat -an | grep 埠
,檢視埠是否已經被開啟處於Listening
狀態 - 上一步確認後,檢查防火牆問題
- 注意伺服器所使用的IP地址,如果是
127.0.0.1
迴環地址,則客戶端只能使用127.0.0.1
才能連線上