码迷,mamicode.com
首页 > 其他好文 > 详细

使用swoole编写简单的echo服务器

时间:2017-03-09 11:37:23      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:异步   logs   function   fgets   png   http   编写   使用   cti   

server.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代码如下:

<?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  

运行结果如下:

技术分享

技术分享

使用swoole编写简单的echo服务器

标签:异步   logs   function   fgets   png   http   编写   使用   cti   

原文地址:http://www.cnblogs.com/jkko123/p/6524280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!