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. LICEcap 动画屏幕录制软件

    下载地址    https://licecap.en.softonic.com/ LICEcap捕捉屏幕的区域并保存为gif动画或lcf格式 效果请看下面的链接 https://www.cnblogs ...

  2. 集合系列 Map(十三):LinkedHashMap

    我们之前说过 LinkedHashMap 是在 HashMap 的基础上,增加了对插入元素的链表维护.那么其到底是怎么实现的呢?今天这篇文章就带我们来一探究竟. public class Linked ...

  3. Cocos Creator 资源加载流程剖析【五】——从编辑器到运行时

    我们在编辑器中看到的资源,在构建之后会进行一些转化,本章将揭开Creator对资源进行的处理. 资源处理的整体规则 首先我们将Creator的开发和运行划分为以下几个场景: 编辑器 当我们将资源放到编 ...

  4. VS2019 开发Django(五)------createsuperuser

    导航:VS2019开发Django系列 上篇我们已经把LazyOrders中用到的C#的实体转成了Django中的Entity,并且已经迁移数据库成功,那么,今天继续介绍Django中内置的数据库操作 ...

  5. php的swoole和rpc区别

    RPC是远程过程调用(Remote Procedure Call)的缩写形式. SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自 ...

  6. Checkedlistbox只能单选不能多选

    private void Checkedlistbox_ItemCheck(object sender, ItemCheckEventArgs e) { ; i < chkCountry.Ite ...

  7. vue中监听路由参数的变化

    在vue项目中,假使我们在同一个路由下,只是改变路由后面的参数值,期望达到数据的更新. mounted: () =>{ this.id = this.$route.query.id; this. ...

  8. WordPress 文件下载漏洞

    Google dork:inurl:"/wp-content/themes/liberator/inc/php/download.php" exploit:https://www. ...

  9. java编译报错 错误: 编码GBK的不可映射字符

    解决方法: 1.  javac -encoding UTF-8 .\Test_Sql.java //加上参数指定utf-8 2.改变文件编码 使用 ANSI编码.

  10. springboot hikari 连接池 在启动时未初始化数据库连接问题

    在启动Springboot 项目时 2019-11-18 21:32:38.223 INFO 1080 --- [on(4)-127.0.0.1] o.s.web.servlet.Dispatcher ...