PHP使用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程序设计有所帮助。

(0)

相关推荐

  • php异步多线程swoole用法实例

    本文实例讲述了php异步多线程swoole用法.分享给大家供大家参考.具体分析如下: swoole重新定义PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务,下面的实例就可以证实这一功能. 一般来说,Swoole提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询. swoole以前听过, 拿来做游戏服务器简直是神器-今天稍微的感受了一下,  在 ubuntu 下搭建了

  • php基于 swoole 实现的异步处理任务功能示例

    本文实例讲述了php基于 swoole 实现的异步处理任务功能.分享给大家供大家参考,具体如下: 安装swoole: 下载官方swoole压缩包,解压进入目录 $ cd swoole # 进入 swoole 目录 $ phpize $ ./configure --with-php-config=/usr/local/php/bin/php-config #注意查看服务器上是否有这个路径 $ make && make install 修改php.in文件 vi /usr/local/php/

  • PHP的swoole扩展安装方法详细教程

    Swoole支持PHP 5.3.10以上版本,所以安装Swoole之前请先安装PHP 5.3.10以上版本,现在来介绍Windows下PHP安装配置方法. 软件版本:php-5.3.1-Win32-VC6-x86.zip 这个不需要额外的安装.net的库,所以就用这个了.可以使用其他的. 1.PHP安装 使用绿色方式,下载Zip文件解压. 2.配置 在解压的根目录下找到php.ini-development,是用于开发环境的配置文件:还有一个php.ini-production,这个是用于生产环

  • PHP扩展Swoole实现实时异步任务队列示例

    本文实例讲述了PHP扩展Swoole实现实时异步任务队列.分享给大家供大家参考,具体如下: 假如要发100封邮件,for循环100遍,用户直接揭竿而起,什么破网站! 但实际上,我们很可能有超过1万的邮件.怎么处理这个延迟的问题? 答案就是用异步.把"发邮件"这个操作封装,然后后台异步地执行1万遍.这样的话,用户提交网页后,他所等待的时间只是"把发邮件任务请求推送进队列里"的时间.而我们的后台服务将在用户看不见的地方跑. 在实现"异步队列"这点上,

  • 详解thinkphp5+swoole实现异步邮件群发(SMTP方式)

    本文介绍了thinkphp5+swoole实现异步邮件群发(SMTP方式),分享给大家,具体如下: 1.环境说明 阿里云centos7 thinkphp5.0.11 swoole2.0.8 2.tp实现邮件发送 在项目下建立如下的文件目录: 其中SendMail.php是我们实际调用的发送邮件的文件.以下是主要代码: namespace app\library\utils\mail; use app\library\utils\mail\PhpMailer; use app\library\ut

  • PHP Swoole异步Redis客户端实现方法示例

    本文实例讲述了PHP Swoole异步Redis客户端实现方法.分享给大家供大家参考,具体如下: 使用版本:1.8.0及以上 使用条件: 1.开启async-redis php --ri swoole (如果没有开启,重新编译安装Swoole时加入 --enable-async-redis  相关文章:Linux下源码包安装Swoole及基本使用) 2.安装hiredis: CentOS yum install libhiredis-devel Ubuntu: apt install libhi

  • PHP Swoole异步MySQL客户端实现方法示例

    本文实例讲述了PHP Swoole异步MySQL客户端实现方法.分享给大家供大家参考,具体如下: 使用函数:swoole_mysql 使用版本:1.8.6及以上 把官方文档的例子改写成了面向对象的形式,示例如下: SwooleMysql.php: <?php class SwooleMysql { public $db = ""; public $server = []; public function __construct() { //实例化 $this->db = n

  • PHP Swoole异步读取、写入文件操作示例

    本文实例讲述了PHP Swoole异步读取.写入文件操作.分享给大家供大家参考,具体如下: 异步读取文件:swoole_async_readfile 异步写入文件:swoole_async_writefile [示例] 读取文件 readfile.php: <?php $res = swoole_async_readfile(__DIR__."/1.txt", function($filename, $content) { echo "文件名:{$filename} 内

  • 使用swoole扩展php websocket示例

    复制代码 代码如下: <?phpdefine('DEBUG', 'on');define("WEBPATH", str_replace("\\","/", __DIR__));require __DIR__ . '/../libs/lib_config.php'; class WebSocket extends Swoole\Network\Protocol\WebSocket{    /**     * 下线时,通知所有人     */ 

  • PHP swoole和redis异步任务实现方法分析

    本文实例讲述了PHP swoole和redis异步任务实现方法.分享给大家供大家参考,具体如下: redis异步任务 interface.php <?php for($i=0;$i<100;$i++){ $msg = "zhezhao[".$i."]"; $redis = new Redis(); $redis->connect("127.0.0.1"); $redis->publish("test",

  • php安装swoole扩展的方法

    本文实例讲述了php安装swoole扩展的方法.分享给大家供大家参考.具体如下: 我本机是OS X,想要安装swoole体验一下,于是: 复制代码 代码如下: andy@AndyMacBookPro:/usr/local/webdata/github$ cd swoole-src/ andy@AndyMacBookPro:/usr/local/webdata/github/swoole-src$ git pull Already up-to-date. andy@AndyMacBookPro:/

  • PHP swoole中使用task进程异步的处理耗时任务应用案例分析

    本文实例讲述了PHP swoole中使用task进程异步的处理耗时任务.分享给大家供大家参考,具体如下: 我们知道,swoole中有两大进程,分别是 master 主进程和 manager 管理进程. 其中 master 主进程中会有一个主 reactor 线程和多个 reactor 线程,主要的作用就是用来维护TCP连接,处理网络IO,收发数据. 而 manager 管理进程,作用则是 fork 和管理 worker 和 task 进程. worker 进程的作用是接收 reactor 线程传

随机推荐