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

Posted 两脚任从行处来,一灵常与气相随。有时四大熏熏醉,借问青天我是

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用swoole编写简单的echo服务器相关的知识,希望对你有一定的参考价值。

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服务器的主要内容,如果未能解决你的问题,请参考以下文章

swoole简单demo测试

如何将我的php脚本以守护进程的方式一直运行

Swoole简单安装与创建TCP服务器

使用事件注册器进行swoole代码封装

laravel 整合 swoole ,并简单 ab 测试对比性能以及在 PHPstorm 中利用debug调试配置swoole服务中的PHP代码

Redis队列和swoole的多进程哪个好