zoukankan      html  css  js  c++  java
  • Linux下源码包安装Swoole及基本使用 转

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/msllws/article/details/84404894

    下载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. ";
    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. ";
    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 ");
    15.  
      });
    16.  
       
    17.  
      //监听WebSocket消息事件
    18.  
      $ws->on('message', function ($ws, $frame) {
    19.  
      echo "Message: {$frame->data} ";
    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 ";
    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>

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

    服务器端收到请求信息:

  • 相关阅读:
    angularJS 修改操作select回显选中的数据
    zkteco iface702 中控考勤机java开发步骤二---获取考勤机 的考勤数据
    zkteco iface702 中控考勤机java开发步骤一---连接考勤机
    JQuery的分页插件pagination.js
    Ajax跨域后台处理
    发送邮箱工具类--阿里企业邮箱群发
    kindeditor-4.1.10 ---文件上传
    导出excel表格
    算法
    Arrays类——Arrays.asList()方法使用
  • 原文地址:https://www.cnblogs.com/brady-wang/p/11507750.html
Copyright © 2011-2022 走看看