• 使用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 
    ";
        }
    
        //有客户端连接时
        public function connect($serv, $fd) {
            echo "connect 
    ";
            $serv->send($fd, "hello 
    ");
        }
    
        public function close($serv, $fd) {
            echo "close 
    ";
        }
    
        public function receive($serv, $fd, $from_id, $data) {
            echo "get message {$fd} : {$data} 
    ";
            //向客户端发送信息
            $serv->send($fd, $data . "
    ");
        }
    }
    
    $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 
    ";
        }
    
        public function receive($client, $data) {
            echo "server send: {$data}";
    
            //向标准输出写入数据
            fwrite(STDOUT, "请输入消息:");
            //获取标准输入数据
            $msg = trim(fgets(STDIN));
            //向服务端发送数据
            $client->send($msg);
        }
    
        public function close($client) {
            echo "close 
    ";
        }
    
        public function error($client) {
            echo "error 
    ";
        }
    }
    
    $cli = new EchoClient();

    然后分别运行这两个脚本

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

    运行结果如下:

  • 相关阅读:
    牛客网-湘潭大学校赛重现H题 (线段树 染色问题)
    bzoj 2243: [SDOI2011]染色 (树链剖分+线段树 区间合并)
    SPOJ QTREE2 (LCA
    Neo4j-Cypher
    MySQL避免插入重复记录:唯一性约束
    python ftp教程
    Neo4j 导入 CSV 文件
    jupyter notebook 安装 jupyter_contrib_nbextension
    python 性能分析(时间,空间)之 line_profiler 模块 ,memory_profiler的使用
    hive 自定义函数
  • 原文地址:https://www.cnblogs.com/jkko123/p/6524280.html
Copyright © 2020-2023  润新知