1. 程式人生 > >【Swoole】簡單安裝與創建TCP服務器

【Swoole】簡單安裝與創建TCP服務器

客戶 編寫程序 lac nco 版本 size sock ear light

pecl install swoole

PHP的異步、並行、高性能網絡通信引擎,使用純C語言編寫,提供了php語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis,數據庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端。

Swoole可以廣泛應用於互聯網、移動通信、企業軟件、雲計算、網絡遊戲、物聯網(IOT)、車聯網、智能家居等領域。 使用PHP+Swoole作為網絡通信框架,可以使企業IT研發團隊的效率大大提升,更加專註於開發創新產品。

關於Swoole環境依賴和對PHP版本的要求,請參照Swoole的官方文檔

http://wiki.swoole.com/wiki/page/7.html

安裝

swoole項目已收錄到PHP官方擴展庫,我們可以通過PHP官方提供的pecl命令,一鍵下載安裝swoole

pecl install swoole

註:需要先裝php-pear

如果安裝完出現如下提示

Installing ‘/usr/lib/php/modules/swoole.so‘
install ok: channel://pecl.php.net/swoole-1.9.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=swoole.so" to php.ini

則需要我們手動在php.ini文件中添加

extension=swoole.so

創建TCP服務器

server.php

<?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: ". $fd.‘-----‘ . $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

可以在命令行模式下輸入

[[email protected]_114_93_centos ~]# netstat -tunpl | grep 9501
tcp        0      0 0.0.0.0:9501                0.0.0.0:*                   LISTEN      15387/php  

看到,已經在監聽9501端口

這時我們就可以用telnet命令來連接服務器了。

技術分享

如果想要遠程連接該服務器,只需將server.php中的IP地址改為0.0.0.0即可。

【Swoole】簡單安裝與創建TCP服務器