1. 程式人生 > >【swoole快速入門1】建立tcp伺服器

【swoole快速入門1】建立tcp伺服器

程式程式碼

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才能連線上