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

 更新时间:2020年03月11日 11:39:47   作者:怀素真  
这篇文章主要介绍了PHP使用swoole编写简单的echo服务器,结合实例形式分析了基于swoole的echo服务器客户端与服务器端相关实现技巧及操作注意事项,需要的朋友可以参考下

本文实例讲述了PHP使用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

运行结果如下:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP网络编程技巧总结》、《php socket用法总结》、《php面向对象程序设计入门教程》、《PHP数据结构与算法教程》及《php程序设计算法总结

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • php设计模式 Template (模板模式)

    php设计模式 Template (模板模式)

    定义一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构可以定义该算法的某些特定步骤
    2011-06-06
  • PHP实现获取url地址中顶级域名的方法示例

    PHP实现获取url地址中顶级域名的方法示例

    这篇文章主要介绍了PHP实现获取url地址中顶级域名的方法,结合实例形式分析了php使用parse_url()针对URL域名解析相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • PHPCMS的使用小结

    PHPCMS的使用小结

    前段时间仔细看了一下PHPCMS这套开源的系统,实现了程序与模板分离,觉得写得真的不错。本人很少关注开源系统,尤其是PHP的,觉得PHP本身就是一个宠大的函数库,不过几千个系统函数确实解决了不少问题。
    2010-09-09
  • PHP操作Redis数据库常用方法示例

    PHP操作Redis数据库常用方法示例

    这篇文章主要介绍了PHP操作Redis数据库常用方法,结合实例形式总结分析了php针对redis数据库连接、字符串、列表、hash字典、set集合等数据类型相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • php通用防注入程序 推荐

    php通用防注入程序 推荐

    今天做完了整个php项目,想来安全问题不少,开发程序的过程中无心过滤参数。所以注入少不了,才有了下面的防注入程序.
    2011-02-02
  • PHP与JavaScript针对Cookie的读写、交互操作方法详解

    PHP与JavaScript针对Cookie的读写、交互操作方法详解

    这篇文章主要介绍了PHP与JavaScript针对Cookie的读写、交互操作方法,结合实例形式分析了php与javascript设置cookie、php读取php及js设置的cookie、js读取php及js设置的cookie等相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • php 调试利器debug_print_backtrace()

    php 调试利器debug_print_backtrace()

    debug_print_backtrace() 是一个很低调的函数,很少有人注意过它. 不过当我对着一个对象调用另一个对象再调用其它的对象和文件中的一个函数出错时,它正在一边笑呢
    2012-07-07
  • 一个简单php扩展介绍与开发教程

    一个简单php扩展介绍与开发教程

    这个扩展早就写好了,只是一直没有时间写在blog上面,今天抽点时间,将它记录下来,以后备用。
    2010-08-08
  • PHP聚合式迭代器接口IteratorAggregate用法分析

    PHP聚合式迭代器接口IteratorAggregate用法分析

    这篇文章主要介绍了PHP聚合式迭代器接口IteratorAggregate用法,结合实例形式分析了聚合式迭代器接口IteratorAggregate的概念、功能、定义及使用方法,需要的朋友可以参考下
    2017-12-12
  • php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系

    php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系

    asort() 函数对数组进行排序并保持索引关系。主要用于对那些单元顺序很重要的结合数组进行排序。可选的第二个参数包含了附加的排序标识
    2011-11-11

最新评论