使用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服务器的更多相关文章
- netty入坑第一步:了解netty和编写简单的Echo服务器和客户端
早期java API通过原生socket产生所谓的"blocking",大致过程是这样 这种的特点是每次只能处理一个请求,如果要实现多个请求并行,就还要分配一个新的线程来给每个客户 ...
- Node.js WEB服务器(1)——编写简单的HTTP服务器
基于分而治之的思想,很多架构都会采用分层的模式来处理某类应用.Node.js在Web开发上也是采用这种模式,分别提供了如下的三个层: Node核心 社区模块 应用逻辑 下面是一个最简形式的web服务器 ...
- go编写简单的web服务器
package main import ( "fmt" "log" "net/http" "strings" ) //h ...
- muduo库的简单使用-echo服务的编写
muduo库的简单使用 muduo是一个基于事件驱动的非阻塞网络库,采用C++和Boost库编写. 它的使用方法很简单,参考这篇文章:TCP网络编程本质论 里面有这么几句: 我认为,TCP 网络编程最 ...
- PHP实现基于Swoole简单的HTTP服务器
引用Swoole官方定义: PHP语言的异步.并行.高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTa ...
- UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信
1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...
- 学习 Linux,101: 自定义或编写简单脚本【转】
转自:http://www.ibm.com/developerworks/cn/linux/l-lpic1-105-2/index.html 学习如何使用标准的 shell 语法.循环和控制结构,以及 ...
- netty入门实现简单的echo程序
最近看以往在程序中编写的代码,发现有一个功能是使用socket通讯来实现的,而那个时候使用的是基于bio的阻塞io来实现的,最近在看netty,发现可以使用netty来使用nio的方式来实现,此博客记 ...
- Swoole 中使用 TCP 异步服务器、TCP 协程服务器、TCP 同步客户端、TCP 协程客户端
TCP 异步风格服务器 异步风格服务器通过监听事件的方式来编写程序.当对应的事件发生时底层会主动回调指定的函数. 由于默认开启协程化,在回调函数内部会自动创建协程,遇到 IO 会产生协程调度,异步风格 ...
随机推荐
- 437. Path Sum III
原题: 437. Path Sum III 解题: 思路1就是:以根节点开始遍历找到适合路径,以根节点的左孩子节点开始遍历,然后以根节点的右孩子节点开始遍历,不断循环,也就是以每个节点为起始遍历点 代 ...
- 使用jQuery+huandlebars遍历数组
兼容ie8(很实用,复制过来,仅供技术参考,更详细内容请看源地址:http://www.cnblogs.com/iyangyuan/archive/2013/12/12/3471227.html) & ...
- 基于Delphi的接口编程入门
为什么使用接口? 举个例子好了:有这样一个卖票服务,电影院可以卖票,歌剧院可以卖票,客运站也可以卖票,那么我们是否需要把电影院..歌剧院和客运站都设计成一个类架构以提供卖票服务?要知道,连经理人都可以 ...
- c#二维码资料
几个主要的C#二维码开发资料,用于学生的本科毕业论文参考 https://blog.csdn.net/xwnxwn/article/details/72636417 C# ZXing.Net生成二维码 ...
- 利用monkey测试android,入门级用户可能遇见的错误及解决办法 【转】
转自[http://blog.csdn.net/zm2714/article/details/7977930] 一.D:\android\android-sdk-windows\tools目录中没有a ...
- <assert.h>库学习
assert的初步认识 assert宏指令是用来诊断程序是否有误的,函数原型如下 void assert(int expression) 那为什么我们要使用assert而不用printf呢?因为ass ...
- python 2.0 与 python 3.0 区别
区别一: python 2.0 : 源码不规范,重复代码很多 python 3.0 : 源码精简,美观.优雅 区别二: PY2 : 有整型int.长整型long. py3:只有整型 ...
- ActiveX 控件
一.ActiveX基础 1.1什么是ActiveX ActiveX是COM规范的一种实现,前身是OLE(Object Linking and Embedding).一般读成:ActiveX Ctron ...
- slot 插槽的使用
在vue 中父组件中的子组件在子组件中添加内容(html标签.文本内容),在子组件中加入slot这样页面中就会呈现出在父组件填写的内容,例如: 父组件中hello是子组件,在子组件中插入slot这样子 ...
- Using Fetch
[Using Fetch] This kind of functionality was previously achieved using XMLHttpRequest. Fetch provide ...