Swoole 基本例項建立

coderChenZR發表於2022-06-23

構建一個Swoole基本例項

下面貼一個基本的基於swoole的echo伺服器

// Serverclass Server{    private $serv;    public function __construct() {        $this->serv = new swoole_server("0.0.0.0", 9501);        $this->serv->set(array(            'worker_num' => 8,            'daemonize' => false,            'max_request' => 10000,            'dispatch_mode' => 2,            'debug_mode'=> 1        ));        $this->serv->on('Start', array($this, 'onStart'));        $this->serv->on('Connect', array($this, 'onConnect'));        $this->serv->on('Receive', array($this, 'onReceive'));        $this->serv->on('Close', array($this, 'onClose'));        $this->serv->start();    }    public function onStart( $serv ) {        echo "Start\n";    }    public function onConnect( $serv, $fd, $from_id ) {        $serv->send( $fd, "Hello {$fd}!" );    }    public function onReceive( swoole_server $serv, $fd, $from_id, $data ) {        echo "Get Message From Client {$fd}:{$data}\n";    }    public function onClose( $serv, $fd, $from_id ) {        echo "Client {$fd} close connection\n";    }}// 啟動伺服器$server = new Server();

從程式碼中可以看出,建立一個swoole_server基本分三步: 1.通過建構函式建立swoole_server物件 2.呼叫 set函式設定swoole_server的相關配置選項 3.呼叫 on函式設定相關回撥函式 關於set配置選項以及on回撥函式的具體說明,請參考我整理的swoole文件(  )

這裡只給出簡單介紹。onStart回撥在server執行前被呼叫,onConnect在有新客戶端連線過來時被呼叫,onReceive函式在有資料傳送到server時被呼叫,onClose在有客戶端斷開連線時被呼叫。這裡就可以大概看出如何使用swoole:在onConnect處監聽新的連線;在onReceive處接收資料並處理,然後可以呼叫send函式將處理結果傳送出去;在onClose處處理客戶端下線的事件。

下面貼出客戶端的程式碼:

<?phpclass Client{    private $client;    public function __construct() {        $this->client = new swoole_client(SWOOLE_SOCK_TCP);    }    public function connect() {        if( !$this->client->connect("127.0.0.1", 9501 , 1) ) {            echo "Error: {$fp->errMsg}[{$fp->errCode}]\n";        }        $message = $this->client->recv();        echo "Get Message From Server:{$message}\n";        fwrite(STDOUT, "請輸入訊息:");          $msg = trim(fgets(STDIN));        $this->client->send( $msg );    }}$client = new Client();$client->connect();

這裡,通過swoole_client建立一個基於TCP的客戶端例項,並呼叫connect函式向指定的IP及埠發起連線請求。隨後即可通過recv()和send()兩個函式來接收和傳送請求。需要注意的是,這裡我使用了預設的同步阻塞客戶端,因此recv和send操作都會產生網路阻塞。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70018476/viewspace-2902539/,如需轉載,請註明出處,否則將追究法律責任。

相關文章