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服务器的更多相关文章

  1. netty入坑第一步:了解netty和编写简单的Echo服务器和客户端

    早期java API通过原生socket产生所谓的"blocking",大致过程是这样 这种的特点是每次只能处理一个请求,如果要实现多个请求并行,就还要分配一个新的线程来给每个客户 ...

  2. Node.js WEB服务器(1)——编写简单的HTTP服务器

    基于分而治之的思想,很多架构都会采用分层的模式来处理某类应用.Node.js在Web开发上也是采用这种模式,分别提供了如下的三个层: Node核心 社区模块 应用逻辑 下面是一个最简形式的web服务器 ...

  3. go编写简单的web服务器

    package main import ( "fmt" "log" "net/http" "strings" ) //h ...

  4. muduo库的简单使用-echo服务的编写

    muduo库的简单使用 muduo是一个基于事件驱动的非阻塞网络库,采用C++和Boost库编写. 它的使用方法很简单,参考这篇文章:TCP网络编程本质论 里面有这么几句: 我认为,TCP 网络编程最 ...

  5. PHP实现基于Swoole简单的HTTP服务器

    引用Swoole官方定义: PHP语言的异步.并行.高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTa ...

  6. UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信

    1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...

  7. 学习 Linux,101: 自定义或编写简单脚本【转】

    转自:http://www.ibm.com/developerworks/cn/linux/l-lpic1-105-2/index.html 学习如何使用标准的 shell 语法.循环和控制结构,以及 ...

  8. netty入门实现简单的echo程序

    最近看以往在程序中编写的代码,发现有一个功能是使用socket通讯来实现的,而那个时候使用的是基于bio的阻塞io来实现的,最近在看netty,发现可以使用netty来使用nio的方式来实现,此博客记 ...

  9. Swoole 中使用 TCP 异步服务器、TCP 协程服务器、TCP 同步客户端、TCP 协程客户端

    TCP 异步风格服务器 异步风格服务器通过监听事件的方式来编写程序.当对应的事件发生时底层会主动回调指定的函数. 由于默认开启协程化,在回调函数内部会自动创建协程,遇到 IO 会产生协程调度,异步风格 ...

随机推荐

  1. Zabbix使用Omsa来监控Dell服务器的硬件状态

    OMSA(Open Manage Server Administrator)是Dell主机的硬件检测和维护软件 OpenManage系统管理方案是戴尔公司基于自主研发力量开发的IT系统管理解决方案,通 ...

  2. Delphi 透明窗体显示文字

    设置窗体属性:BorderStyle 属性设置为 bsNoneColor 属性设置为 clWhite(白色:窗体背景色)TransparentColor 属性设置为 trueTransparentCo ...

  3. log4j 文件配置

    //log4j配置日志文件输出到磁盘一天一个 log4j.appender.File=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.F ...

  4. getElementsByTagName

    1.getElementsByTagName * document.getelementByID(id名称)* 通过id名称获取元素,它只有一个主语,docment(整个文档)** getElemne ...

  5. IP/IGMP/UDP校验和算法

    校验和算法:IP.IGMP.UDP和TCP报文头部都有检验和字段,其算法都是一样的. IP.IGMP.UDP和TCP校验和的范围:仅报文头部长度. 在发送数据时,为了计算数据包的检验和.应该按如下步骤 ...

  6. VS2012/VS2013配色方案

    VS的配色方案下载地址 http://www.hanselman.com/blog/VisualStudioProgrammerThemesGallery.aspx 或者 http://studios ...

  7. macbook pro。已经连接上wifi,但是,不能上网的问题

    有天,macbook pro关机后,再打开就上不了网了,后面网上看了,说是安装了 lantern出问题,我一想,有次关机lantern是被我强制关掉的.所以再次打开lantern就可以 上网了,然后正 ...

  8. com.google.gson.stream.MalformedJsonException

    今天下午项目更新后,调用接口时,提示“请求失败”,发现项目网络框架解析时,报错如下:com.google.gson.stream.MalformedJsonException: Unterminate ...

  9. cakePHP 分页栏

    <div class="page"><?php if ($total > 1) echo $this->element('page_list', ar ...

  10. mybatis 插入返回自增后的id

    //serviceImpl int customerId = customerDao.insertDynamic(customer1); System.out.println("id==== ...