使用swoole編寫簡單的echo服務器

server.php代碼以下:php

<?php
class EchoServer {
    protected $serv = null;

    public function __construct() {
        $this->serv = new swoole_server('0.0.0.0', 8888);
        //配置參數
        $this->serv->set(array(
            'worker_num' => 4,
            'daemonize' => 0,
        ));
        //註冊回調函數
        $this->serv->on('start', array($this, 'start'));
        $this->serv->on('connect', array($this, 'connect'));
        $this->serv->on('receive', array($this, 'receive'));
        $this->serv->on('close', array($this, 'close'));
        //啓動服務
        $this->serv->start();
    }

    public function start($serv) {
        echo "start \n";
    }

    //有客戶端鏈接時
    public function connect($serv, $fd) {
        echo "connect \n";
        $serv->send($fd, "hello \n");
    }

    public function close($serv, $fd) {
        echo "close \n";
    }

    public function receive($serv, $fd, $from_id, $data) {
        echo "get message {$fd} : {$data} \n";
        //向客戶端發送信息
        $serv->send($fd, $data . "\n");
    }
}

$serv = new EchoServer();

client.php代碼以下:swoole

<?php
class EchoClient {
    protected $client = null;

    public function __construct() {
        //注意這裏需設置爲異步,否則下面沒法設置事件回調函數
        $this->client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

        $this->client->on('connect', array($this, 'connect'));
        $this->client->on('receive', array($this, 'receive'));
        $this->client->on('close', array($this, 'close'));
        $this->client->on('error', array($this, 'error'));
        //鏈接服務端
        $this->client->connect('0.0.0.0', 8888);
    }

    public function connect($client) {
        echo "connect \n";
    }

    public function receive($client, $data) {
        echo "server send: {$data}";

        //向標準輸出寫入數據
        fwrite(STDOUT, "請輸入消息:");
        //獲取標準輸入數據
        $msg = trim(fgets(STDIN));
        //向服務端發送數據
        $client->send($msg);
    }

    public function close($client) {
        echo "close \n";
    }

    public function error($client) {
        echo "error \n";
    }
}

$cli = new EchoClient();

而後分別運行這兩個腳本異步

> /data/php56/bin/php server.php
> /data/php56/bin/php client.php  

運行結果以下:函數

相關文章
相關標籤/搜索