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

  1. Linux下搭建SVN服务器及自动更新项目文件到web目录(www)的方法

    首先搭建SVN服务器 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion   ...

  2. 【腾讯云】腾讯云服务器搭建ftp服务器

    一.硬件描述 1.1 云服务器:腾讯云 云主机 操作系统:Ubuntu Server 14.04.1 LTS 32位 CPU:1核 内存:1GB 系统盘:20GB(本地磁盘) 数据盘:0GB 公网带宽 ...

  3. 原 Linux搭建SVN 服务器2

    原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55)   阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...

  4. 原 Linux搭建SVN 服务器

    原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55)   阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...

  5. 轻松使用Nginx搭建web服务器

    如果读者以前做过web开发的话,就应该知道如何去搭建一个web服务器来跑你的web站点,在windows下你可能会选择去用IIS,十分的快捷,在linux下,你可能首先会想到apache,“一哥”( ...

  6. CenOS搭建FTP服务器

    CenOS搭建FTP服务器 -------------------------------------------------------------------------准备工作--------- ...

  7. Linux搭建SVN 服务器

    Linux搭建SVN 服务器 1          安装SVN 2          使用客户端连接 2.1       使用windows的客户端 2.2       使用Linux下的命令行 3  ...

  8. 应用SVN(CentOS中搭建SVN服务器)

    简单介绍如何在虚拟机 CentOS 中,搭建 SVN 服务器. 软件版本信息 Vmware 10.0.0 build-1295980 CentOS 7.0-1406-x64 Java 1.7.0_67 ...

  9. Linux搭建SVN 服务器(转)

    转自:http://my.oschina.net/lionel45/blog/298305 Linux搭建SVN 服务器 作者: 沈小然    日期:2014年 8月 5日 1          安装 ...

  10. 搭建git服务器及利用git hook自动布署代码

    注意:服务器:Ubuntu Server 14.04,我的项目比较小,所有操作都使用root,建议最好新建一个用户(需要有管理员权限,否则在后面使用hooks自动部署代码时会出现各种权限问题,很蛋疼的 ...

随机推荐

  1. IT兄弟连 HTML5教程 CSS3属性特效 倒影

    在Web制作中,有些时候需要实现一些倒影的效果.在传统网页中,我们只能使用photoshop事先将倒影设计好,然后导入到网页中,这样不但耗费资源,也阻碍了开发效率.而CSS新增了Reflections ...

  2. SpringMVC的工作流程?Mybatis和hibernate区别?

    SpringMVC的工作流程?1. 用户发送请求至前端控制器DispatcherServlet2. DispatcherServlet收到请求调用HandlerMapping处理器映射器.3. 处理器 ...

  3. Angular常用VSCode插件

    1.Angular 8 Snippets(全家桶) 2.TSLint(ts代码规范.错误提示) 3.Material Icon Theme(文件图标) 4.One Dark Pro(主题) 5.Ang ...

  4. windows中常见后门持久化方法总结

    转自:https://www.heibai.org/category-13.html 前言 当我们通过各种方法拿到一个服务器的权限的时候,我们下一步要做的就是后渗透了,而后门持久化也是我们后渗透很重要 ...

  5. 分析Android APK-砸壳-Fdex2

    砸壳的工具千千万,但是FDex2 是最有能耐的,我尝试过各种壳,都是秒砸的.特别说明一下,360的壳,oncreated 方法还是空的,但是其他大部分内容还是有的,反正是可以参考一下的. 安装环境: ...

  6. Bug 28450914 : ORA-600: [KDLRCI_GET_INLINE_DATA] SELECTING FROM CDB_FEATURE_USAGE_STATISTICS

    alert日志报错: 2019-11-18T07:15:12.704938+08:00Errors in file /u01/app/oracle/diag/rdbms/sibcyb1/SIBCYB1 ...

  7. MySQL数据库~~~~~锁和事务

    一 锁 innodb存储引擎默认是行级锁 行级锁定最大的特点就是锁定对象的颗粒度很小,也是目前各大数据库管理软件所实现的锁定颗粒度最小的.由于锁定颗粒度很小,所以发生锁定资源争用的概率也最小,能够给予 ...

  8. 表单生成器(Form Builder)之mongodb表单数据——整理数据

    在上篇笔记中,为车辆信息表.车辆耗损表以及车辆营收表插入了一些数据.之后便是查询了,重点也在查询……按照之前定好的数据结构,如果查询mongodb document的最外层比较简单,但是我们的重点应该 ...

  9. 线上cpu使用率过高解决方案

    一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. 下面我们将一步步定位问题,详尽的介绍每一步骤的相关知识. 一.通过top命令定位占用cpu高的进程 执行top命令得到 ...

  10. Mysql增量备份之Mysqldump&Mylvmbackup

    简单介绍 备份类型 备份方式 热备份:备份期间不需要服务停机,业务不受影响: 温备份:备份期间仅允许读的请求: 冷备份:备份期间需要关闭Mysql服务或读写请求都不受影响: 完全备份:full bac ...