版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

下载Swoole PECL扩展源码包:http://pecl.php.net/package/swoole

关于PHP版本依赖选择:

下载好放到/usr/local/src下,解压缩:

tar -zxvf swoole-2.2.0.tgz
 

准备扩展安装编译环境:

phpize
 

查看php-config位置:

find / -name php-config
 

配置:(--with-php-config==后面是你自己的php-config位置)

./configure --with-php-config=/www/server/php/72/bin/php-config
 

编译安装:

make && make install
 

在php.ini里面加一行 :

extension = swoole.so
 

使用 php -m 命令查看swoole扩展已经安装成功:

查看phpinfo信息:

(测试前说明:以下使用的端口,要确认服务器放行,宝塔环境还需要添加安全组规则)

【创建TCP服务器】

创建server.php:

  1.  
    <?php
  2.  
    //创建Server对象,监听 127.0.0.1:9501端口
  3.  
    $serv = new swoole_server("127.0.0.1", 9501);
  4.  
     
  5.  
    //监听连接进入事件
  6.  
    $serv->on('connect', function ($serv, $fd) {
  7.  
    echo "Client: Connect.\n";
  8.  
    });
  9.  
     
  10.  
    //监听数据接收事件
  11.  
    $serv->on('receive', function ($serv, $fd, $from_id, $data) {
  12.  
    $serv->send($fd, "Server: ".$data);
  13.  
    });
  14.  
     
  15.  
    //监听连接关闭事件
  16.  
    $serv->on('close', function ($serv, $fd) {
  17.  
    echo "Client: Close.\n";
  18.  
    });
  19.  
     
  20.  
    //启动服务器
  21.  
    $serv->start();

启动TCP服务:

php server.php
 

查看9501端口已被监听:

netstat -an | grep 9501
 

使用telnet连接TCP服务,输入hello,服务器返回hello即测试成功:

telnet 127.0.0.1 9501
 

(如果telnet工具没有安装,执行yum install telnet 、yum install telnet-server)

也可以写一个TCP客户端连接TCP服务器端:

创建tcp_client.php:

  1.  
    <?php
  2.  
    //创建Client对象,监听 127.0.0.1:9501端口
  3.  
    $client = new swoole_client(SWOOLE_SOCK_TCP);
  4.  
     
  5.  
    if(!$client->connect("127.0.0.1" ,9501)){
  6.  
    echo "连接失败";
  7.  
    exit;
  8.  
    }
  9.  
     
  10.  
    //向tcp服务器发送消息
  11.  
    fwrite(STDOUT, "请输入:");
  12.  
    $msg = trim(fgets(STDIN));
  13.  
    $client->send($msg);
  14.  
     
  15.  
    //接受tcp服务器消息
  16.  
    $result = $client->recv();
  17.  
    echo $result;

启动tcp客户端:

php tcp_client.php
 

测试结果:

【创建UDP服务器】

创建udp_server.php:

  1.  
    <?php
  2.  
    //创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP
  3.  
    $serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
  4.  
     
  5.  
    //监听数据接收事件
  6.  
    $serv->on('Packet', function ($serv, $data, $clientInfo) {
  7.  
    $serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);
  8.  
    var_dump($clientInfo);
  9.  
    });
  10.  
     
  11.  
    //启动服务器
  12.  
    $serv->start();

启动UDP服务:

php udp_server.php
 

查看9502端口已被监听:

netstat -an | grep 9502
 

使用netcat连接UDP服务,输入hello,服务器返回hello即测试成功(CentOS):

nc -u 127.0.0.1 9502
 

(如果没有安装netcat监听器,执行yum install -y nc)

【创建Web服务器】

创建http_server.php:

  1.  
    <?php
  2.  
    $http = new swoole_http_server("0.0.0.0", 9501);
  3.  
     
  4.  
    //配置静态文件根目录(可选)
  5.  
    $http->set([
  6.  
    'document_root' => '/www/wwwroot/lwsblog',
  7.  
    'enable_static_handler' => true,
  8.  
    ]);
  9.  
     
  10.  
    $http->on('request', function ($request, $response) {
  11.  
    var_dump($request->get, $request->post);
  12.  
     
  13.  
    //设置header
  14.  
    $response->header("Content-Type", "text/html; charset=utf-8");
  15.  
     
  16.  
    //设置cookie
  17.  
    $response->cookie("name", "lws", time()+3600);
  18.  
     
  19.  
    //发送Http响应体,并结束请求处理。
  20.  
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
  21.  
    });
  22.  
     
  23.  
    $http->start();

启动服务:

php http_server.php
 

(如果9501端口已经被占用查看进程PID,杀死进程:)

lsof -i:9501
 

kill 9013
 

浏览器访问主机地址:端口号,得到程序预期结果即测试成功:

【创建WebSocket服务器】

创建ws_server.php:

  1.  
    <?php
  2.  
    //创建websocket服务器对象,监听0.0.0.0:9501端口
  3.  
    $ws = new swoole_websocket_server("0.0.0.0", 9501);
  4.  
     
  5.  
    //配置静态文件根目录(可选)
  6.  
    $ws ->set([
  7.  
    'document_root' => '/www/wwwroot/lwsblog',
  8.  
    'enable_static_handler' => true,
  9.  
    ]);
  10.  
     
  11.  
    //监听WebSocket连接打开事件
  12.  
    $ws->on('open', function ($ws, $request) {
  13.  
    var_dump($request->fd, $request->get, $request->server);
  14.  
    $ws->push($request->fd, "hello, welcome\n");
  15.  
    });
  16.  
     
  17.  
    //监听WebSocket消息事件
  18.  
    $ws->on('message', function ($ws, $frame) {
  19.  
    echo "Message: {$frame->data}\n";
  20.  
    $ws->push($frame->fd, "server: {$frame->data}");
  21.  
    });
  22.  
     
  23.  
    //监听WebSocket连接关闭事件
  24.  
    $ws->on('close', function ($ws, $fd) {
  25.  
    echo "client-{$fd} is closed\n";
  26.  
    });
  27.  
     
  28.  
    $ws->start();

运行程序:(这里还是要确认监听的端口没有被占用,如果被占用查看进程PID,杀死进程)

php ws_server.php
 

前端页面js监听:(127.0.0.1改成你的主机地址)

  1.  
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  
    <html xmlns="http://www.w3.org/1999/xhtml">
  3.  
    <head>
  4.  
    <title>WebSocket</title>
  5.  
    </head>
  6.  
    <body>
  7.  
    </body>
  8.  
     
  9.  
    <script type="text/javascript">
  10.  
    var wsServer = 'ws://127.0.0.1:9501';
  11.  
    var websocket = new WebSocket(wsServer);
  12.  
    websocket.onopen = function (evt) {
  13.  
    console.log("Connected to WebSocket server.");
  14.  
    };
  15.  
     
  16.  
    websocket.onclose = function (evt) {
  17.  
    console.log("Disconnected");
  18.  
    };
  19.  
     
  20.  
    websocket.onmessage = function (evt) {
  21.  
    console.log('Retrieved data from server: ' + evt.data);
  22.  
    };
  23.  
     
  24.  
    websocket.onerror = function (evt, e) {
  25.  
    console.log('Error occured: ' + evt.data);
  26.  
    };
  27.  
    </script>
  28.  
    </html>

使用谷歌浏览器访问前端页面:

服务器端收到请求信息:

Linux下源码包安装Swoole及基本使用 转的更多相关文章

  1. Linux 下源码包安装MariaDB

    .8.5]# cd cmake-2.8.5 [root@zabbix_server cmake-2.8.5]# ./bootstrap [root@zabbix_server cmake-2.8.5] ...

  2. Linux yum源码包安装和卸载

    Linux 下的绝大多数源码包都是用 C 语言编写的,还有少部分是用 C++ 等其他程序语言编写的.所以,要想安装源码包,必须安装 C 语言编译器 gcc(如果是用 C++ 编写的程序,则还需要安装 ...

  3. [Linux] 028 源码包安装过程

    1. 安装准备 安装 C 语言编译器 下载源码包 如:apache 相应源码包下载地址 2. 安装注意事项 源代码保存位置:/usr/local/src 软件安装位置:/usr/local 如何确定安 ...

  4. Linux之源码包安装软件

    安装准备      安装c语言编辑器 gcc      压缩包  node-v6.2.0-linux-x64.tar.gz   源码包保存位置  /usr/local/src/ 源码包安装位置 /us ...

  5. Linux下源码编译安装rpy2

    R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...

  6. Linux中源码包安装

    1.准备环境 a.因为是编译安装,所以需要安装gcc编译器 b.下载源码包 2.注意事项 a.源代码保存位置 /usr/local/src/ b.软件安装位置 /usr/local/ c.如何确定安装 ...

  7. 1、Linux下源码编译安装PostgreSQL

    操作系统:Centos7 说明:postgresql必须在postgres用户下初始化数据库和启动,否则报错. PostgreSQL的特性 PostgreSQL是一种几乎可以运行在各种平台上的免费的开 ...

  8. 在Linux下源码编译安装GreatSQL/MySQL

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...

  9. Linux 下源码编译安装 vim 8.1

    前言 目前 linux 的各个发行版基本上都是带了一个 vi 编辑器的,而本文要说的 vim 编辑器对 vi 做了一些优化升级,更好用.当我们需要远程操作一台 linux 服务器的时候,只能使用命令行 ...

随机推荐

  1. ES6内建对象的继承

    在ES6之前, JS是无法通过继承的方式创建属于自己的特殊数组的, 也就是说可以使用原型链来继承数组的一些方法, 但是某些返回一个数组的方法返回的值还是一个Array的实例, 例如slice, len ...

  2. rf笔记

    1.使用robot 用例绝对路径 可执行用例 2.robot --h 可以查看命令用法 3. 创建字典 *** Settings *** Library         Collections *** ...

  3. python安装lnmp

    #!/usr/bin/python # -*- coding:utf-8 -*- # 注意:本实验用root用户.已经安装python3.6.5 用pycharm运行,首先把nginx安装包放在 /u ...

  4. Java读取Excel文件(包括xls和xlsx)的样例程序

    样例程序如下所示,其中: parseXls()函数依赖于jxl,只能读取xls格式文件: parseExcel()函数依赖于apache poi,能够读取xls和xlsx两种格式的文件. jxl的依赖 ...

  5. Python3之切片及内置切片函数slice

       切片   取一个list或tuple的部分元素是非常常见的操作.比如,一个list L=[0,1,2,3,4,5,6,7,8,9] 取前3个元素,应该怎么做 笨方法,一个个列出来 >> ...

  6. NET Core 3.0中的WPF

    在.NET Core 3.0中的WPF中使用IOC图文教程   我们都知道.NET Core 3.0已经发布了第六个预览版,我们也知道.NET Core 3.0现在已经支持创建WPF项目了,刚好今天在 ...

  7. Linux内核编译、安装流程

    原文链接:https://blog.csdn.net/qq_28437139/article/details/83692907 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请 ...

  8. 获取Android手机日志

    方式一:使用USB连接 1.在手机上启用USB调试2.在终端输入adb devices 3.获取日志 只连接一个设备:1)清除已缓存日志:adb logcat -c2)获取日志并保存到本地:adb l ...

  9. QComboBox的currentIndexChanged信号死循环问题

    connect(m_pComboBoxDevice, SIGNAL(currentIndexChanged(int)), this, SLOT(sltComboBoxDeviceCurrentText ...

  10. StarUML3.1.0版(2019.3.6)生成Java代码

    下载官网 StarUML3.1.0(2019.3.6) 步骤 打开StarUML: 点击菜单栏的Tools: 列表中如果有Java,说明已经有这个生成Java代码的扩展了: 列表里如果没有Java: ...