swoole1--搭建echo服务器
1.安装swoole :pecl install swoole,然后修改php.ini 开启swoole扩展:extension=swoole.so
2.写一个服务器Server.php
1 <?php
2
3 class Server{
4 private $serv;
5
6 public function __construct(){
7 $this->serv = new swoole_server("0.0.0.0",9501);
8 $this->serv->set(['worker_num'=>8,'daemonize'=>false]);
//注册服务器回调时间
9 $this->serv->on('Start',[$this,'onStart']);
10 $this->serv->on('Connect',[$this,'onConnect']);
11 $this->serv->on('Receive',[$this,'onReceive']);
12 $this->serv->on('Close',[$this,'onClose']);
13 $this->serv->start();
14 }
15
16 public function onStart($serv){
17 echo "Start\n";
18 }
19
20 public function onConnect($serv,$fd,$from_id){
21 $serv->send($fd,"hello,$fd,欢迎连接");
22 }
23
24 public function onReceive($serv,$fd,$from_id,$data){
25 echo "get message from client {$fd},{$data}\n";
26 $serv->send($fd,$data);
27
28 }
29
30 public function onClose($serv,$fd,$from_id){
31 echo "client {$fd} close connection \n";
32 }
33
34 }
35
36 @$server = new Server();//开了xDebug,这里不用@会弹出警告信息
3.写一个客户端Client.php
<?php
class Client
{
private $client; public function __construct() {
$this->client = new swoole_client(SWOOLE_SOCK_TCP);//同步tcp客户端
} public function connect() {
if( !$this->client->connect("127.0.0.1", 9501 , 1) ) {
echo "Error: {$this->client->errMsg}[{$this->client->errCode}]\n";
} fwrite(STDOUT, "请输入消息 Please input msg:"); //STDOUT,STDIN : php的伪协议,标准输入(php://stdin)输出(php://stdout)流,这里是将提示信息输出到命令行,类似echo
$msg = trim(fgets(STDIN));//在这里fgets会读取命令行输入的内容,直到读取到换行符或者、EOF或者最大数据量的时候停止读取
$this->client->send( $msg ); $message = $this->client->recv();
echo "Get Message From Server:{$message}\n";
}
} $client = new Client();
$client->connect();//这里只能收发一次消息后关闭
4.异步客户端
1 <?php
2
3 class Client{
4 private $client;
5
6 public function __construct(){
7 $this->client = new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC);//加了异步之后要注册回调,不然报错
8 $this->client->on('connect',[$this,'onConnect']);
9 $this->client->on('receive',[$this,'onReceive']);
10 $this->client->on('error',[$this,'onError']);
11 $this->client->on('close',[$this,'onClose']);
12 }
13
14 public function connect(){
15 if(!$this->client->connect("127.0.0.1",9501,1)){
16 echo "Error :{$this->client->errMsg}[{$this->client->errCode}]\n";
17 }
18 //客户端异步之后就不能再同步发消息
19 // fwrite(STDOUT,"请输入消息(please input msg):");
20 // $msg = trim(fgets(STDIN));
21 // $this->client->send($msg);
22
23 // $message = $this->client->recv();
24 // echo "get message from Server:{$message}\n";
25 }
26
27 public function onConnect($cli){
28 $cli->send("hello server ,I'm connect".PHP_EOL);
29 }
30
31 public function onReceive($cli,$data){
32 echo "receive message from server:".$data.PHP_EOL;
33 fwrite(STDOUT,"回复:");
34 $msg = trim(fgets(STDIN));
35 $cli->send($msg);
36 }
37
38 public function onError($cli){
39 echo "Connect faild".PHP_EOL;
40 }
41
42 public function onClose($cli){
43 echo "client connect close".PHP_EOL;
44 }
45
46 }
47
48 $client = new Client();
49 $client->connect();
5.启动Server.php,,Client.php
swoole1--搭建echo服务器的更多相关文章
- Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法
首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion ...
- 【腾讯云】腾讯云服务器搭建ftp服务器
一.硬件描述 1.1 云服务器:腾讯云 云主机 操作系统:Ubuntu Server 14.04.1 LTS 32位 CPU:1核 内存:1GB 系统盘:20GB(本地磁盘) 数据盘:0GB 公网带宽 ...
- 原 Linux搭建SVN 服务器2
原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55) 阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...
- 原 Linux搭建SVN 服务器
原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55) 阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...
- 轻松使用Nginx搭建web服务器
如果读者以前做过web开发的话,就应该知道如何去搭建一个web服务器来跑你的web站点,在windows下你可能会选择去用IIS,十分的快捷,在linux下,你可能首先会想到apache,“一哥”( ...
- CenOS搭建FTP服务器
CenOS搭建FTP服务器 -------------------------------------------------------------------------准备工作--------- ...
- Linux搭建SVN 服务器
Linux搭建SVN 服务器 1 安装SVN 2 使用客户端连接 2.1 使用windows的客户端 2.2 使用Linux下的命令行 3 ...
- 应用SVN(CentOS中搭建SVN服务器)
简单介绍如何在虚拟机 CentOS 中,搭建 SVN 服务器. 软件版本信息 Vmware 10.0.0 build-1295980 CentOS 7.0-1406-x64 Java 1.7.0_67 ...
- Linux搭建SVN 服务器(转)
转自:http://my.oschina.net/lionel45/blog/298305 Linux搭建SVN 服务器 作者: 沈小然 日期:2014年 8月 5日 1 安装 ...
- 搭建git服务器及利用git hook自动布署代码
注意:服务器:Ubuntu Server 14.04,我的项目比较小,所有操作都使用root,建议最好新建一个用户(需要有管理员权限,否则在后面使用hooks自动部署代码时会出现各种权限问题,很蛋疼的 ...
随机推荐
- cinder安装与配置
cinder是openstack中提供块存储服务的组件,主要是为虚拟机实例提供虚拟磁盘. 通过某种协议(SAS,SCSI,SAN,iSCSI等)挂接裸硬盘,然后分区.格式化创建的文件,或者直接使用裸硬 ...
- 【1】基于OpenCV的DLL动态库隐式连接
1DLL的作用 DLL是一个包含可由多个程序同时使用的代码和数据的库.例如:在Windows操作系统中,Comdlg32 DLL执行与对话框有关的常见函数.因此,每个程序都可以使用该DLL中包含的功能 ...
- mysql之行转列与列转行
mysql之行转列与列转行是数据查询的常见操作,以更好的来展示数据,下面就详细说说怎么实现. 行转列 行转列的话,就是将一条一条的行数据记录转换为一条列数据展示,一般来说是根据某一列来做汇总数据的操作 ...
- Python高级特性——迭代(Iteration)
1.给定一个集合list或者tuple,可以通过for …… in ……的语法来实现循环遍历,这个循环我们就叫做迭代 迭代list: >>> m = ['haha','hehe',' ...
- Nlog配置
初次使用nlog,里里外外找了好久,终于搞会了. 使用nlog建日志输出到txt文件.数据库.邮件 nlog配置,如图 码云dome
- 【Cef编译】 CefSharp编译失败,检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
编译CefSharp生成后一个libcef_dll_wrapper.lib时,供CefSharp使用.结果CefSharp编译的时候报错.遇到以下异常: libcef_dll_wrapper.lib( ...
- Python 和 JS 有什么相似?
Python 是一门运用很广泛的语言,自动化脚本.爬虫,甚至在深度学习领域也都有 Python 的身影.作为一名前端开发者,也了解 ES6 中的很多特性借鉴自 Python (比如默认参数.解构赋值. ...
- 嵌入Canvas App到Dynamics 365 Customer Engagement(Model-Driven App)中,创造更多可能!
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- hadoop搭建的前期准备
这个hadoop的搭建是以比赛前的练习为目的的,所以我直接以root用户来搭建hadoop,主要也是方便我自己以后复习用的 需要的软件:vmware15.5,xshell6,xftp6,jdk Lin ...
- EasyExcel示例(阿里巴巴)基于Maven
首先感谢阿里巴巴提供了easyexcel工具类,github地址:https://github.com/alibaba/easyexcel 注意!!这里只是一个简单的示例,VC大法即可使用,对于复杂的 ...