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. ConcurrentHashMap源码走读

    目录 ConcurrentHashMap源码走读 简介 放入数据 容器元素总数更新 容器扩容 协助扩容 遍历 ConcurrentHashMap源码走读 简介 在从JDK8开始,为了提高并发度,Con ...

  2. Python 的 Geth 封装库 PyGeth

    PyGeth 是一个 Python 封装库,用来作为子进程运行 geth. 系统依赖 该库需要 geth 可执行文件. 安装 pip install py-geth 快速启动 运行连接到 mainne ...

  3. 关于css布局的记录(三) --布局实战

    1.经典布局,上头下尾,两侧固定,中间自适应 效果图: 实现代码(普通): <!DOCTYPE html> <html lang="en"> <hea ...

  4. 零基础想学习C语言,没资源、没人带、不知道从何开始?

    初学编程的小伙伴经常会遇到的问题,1.没资源 2.没人带 3.不知道从何开始 ? 小编也是从新手期过来的,所以很能理解萌新的难处,现在整理一些以前自己学习买来的一些资料送给大家,希望对广大初学小伙伴有 ...

  5. 【ftp服务】配置ftp用户不能返回上级目录,只能在指定的目录

    500 OOPS: vsftpd: both local and anonymous access disabled! 出现这个错,需要修改配置:local_enable=YES 500 OOPS: ...

  6. Android Studio学习-连接真机测试教学

    Android Studio 原文链接 https://blog.csdn.net/weixin_44304387/article/details/99213012 真机测试会比AVD(Android ...

  7. swoole简介

    swoole是PHP的扩展,又不是一个普通的扩展.普通的扩展只是提供一个库函数.而swoole扩展在运行后会接管PHP的控制权,进入事件循环.当IO事件发生后,swoole会自动回调指定的PHP函数. ...

  8. Dynamics 365客户端编程示例:两个选项集字段的联动

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. 1.1 菜单管理 ——MyRapid WinForm快速开发框架-功能介绍

    菜单表数据库设计 可以根据数据表取得树状目录,其中 版本和作者 可以分别对版本和修改人进行追溯 有兴趣的朋友可以尝试再添加一个收藏夹   也是比较常用的功能   这里我没有做这个功能 然后看下菜单编辑 ...

  10. 图像的相似度Hash算法

    Hash算法有三种,分别为平均哈希算法(aHash).感知哈希算法你(pHash)和差异哈哈希算法(dHash). 针对以上三种的Hash算法详解见博客园文章 https://www.cnblogs. ...