Linux下源码包安装Swoole及基本使用操作图文详解


Posted in PHP onApril 02, 2019

本文实例讲述了Linux下源码包安装Swoole及基本使用操作。分享给大家供大家参考,具体如下:

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

关于PHP版本依赖选择:

Linux下源码包安装Swoole及基本使用操作图文详解

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

tar -zxvf swoole-2.2.0.tgz

准备扩展安装编译环境:

phpize

Linux下源码包安装Swoole及基本使用操作图文详解

查看php-config位置:

find / -name php-config

Linux下源码包安装Swoole及基本使用操作图文详解

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

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

编译安装:

make && make install

Linux下源码包安装Swoole及基本使用操作图文详解

在php.ini里面加一行 :

extension = swoole.so

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

Linux下源码包安装Swoole及基本使用操作图文详解

查看phpinfo信息:

Linux下源码包安装Swoole及基本使用操作图文详解

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

【创建TCP服务器】

创建server.php:

<?php
  //创建Server对象,监听 127.0.0.1:9501端口
  $serv = new swoole_server("127.0.0.1", 9501); 
 
  //监听连接进入事件
  $serv->on('connect', function ($serv, $fd) { 
    echo "Client: Connect.\n";
  });
 
  //监听数据接收事件
  $serv->on('receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, "Server: ".$data);
  });
 
  //监听连接关闭事件
  $serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
  });
 
  //启动服务器
  $serv->start();

启动TCP服务:

php server.php

查看9501端口已被监听:

netstat -an | grep 9501

Linux下源码包安装Swoole及基本使用操作图文详解

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

telnet 127.0.0.1 9501

Linux下源码包安装Swoole及基本使用操作图文详解

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

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

创建tcp_client.php:

<?php
  //创建Client对象,监听 127.0.0.1:9501端口
  $client = new swoole_client(SWOOLE_SOCK_TCP); 

  if(!$client->connect("127.0.0.1" ,9501)){
	echo "连接失败";
	exit;
  }

  //向tcp服务器发送消息
  fwrite(STDOUT, "请输入:");
  $msg = trim(fgets(STDIN));
  $client->send($msg);

  //接受tcp服务器消息
  $result = $client->recv();
  echo $result;

启动tcp客户端:

php tcp_client.php

测试结果: 

Linux下源码包安装Swoole及基本使用操作图文详解

【创建UDP服务器】

创建udp_server.php:

<?php
  //创建Server对象,监听 127.0.0.1:9502端口,类型为SWOOLE_SOCK_UDP
  $serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); 

  //监听数据接收事件
  $serv->on('Packet', function ($serv, $data, $clientInfo) {
    $serv->sendto($clientInfo['address'], $clientInfo['port'], "Server ".$data);
    var_dump($clientInfo);
  });

  //启动服务器
  $serv->start();

启动UDP服务:

php udp_server.php

查看9502端口已被监听:

netstat -an | grep 9502

Linux下源码包安装Swoole及基本使用操作图文详解

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

nc -u 127.0.0.1 9502

 Linux下源码包安装Swoole及基本使用操作图文详解

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

【创建Web服务器】

创建http_server.php:

<?php
  $http = new swoole_http_server("0.0.0.0", 9501);
  
  //配置静态文件根目录(可选)
  $http->set([
    'document_root' => '/www/wwwroot/lwsblog',
    'enable_static_handler' => true,
  ]);

  $http->on('request', function ($request, $response) {
    var_dump($request->get, $request->post);
    
    //设置header
    $response->header("Content-Type", "text/html; charset=utf-8");

    //设置cookie
    $response->cookie("name", "lws", time()+3600);

    //发送Http响应体,并结束请求处理。
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
  });

  $http->start();

启动服务:

php http_server.php

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

Linux下源码包安装Swoole及基本使用操作图文详解

lsof -i:9501

Linux下源码包安装Swoole及基本使用操作图文详解

kill 9013

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

Linux下源码包安装Swoole及基本使用操作图文详解

【创建WebSocket服务器】

创建ws_server.php:

<?php
  //创建websocket服务器对象,监听0.0.0.0:9501端口
  $ws = new swoole_websocket_server("0.0.0.0", 9501);
  
  //配置静态文件根目录(可选)
  $ws ->set([
    'document_root' => '/www/wwwroot/lwsblog',
    'enable_static_handler' => true,
  ]);

  //监听WebSocket连接打开事件
  $ws->on('open', function ($ws, $request) {
    var_dump($request->fd, $request->get, $request->server);
    $ws->push($request->fd, "hello, welcome\n");
  });

  //监听WebSocket消息事件
  $ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");
  });

  //监听WebSocket连接关闭事件
  $ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
  });

  $ws->start();

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

php ws_server.php

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>WebSocket</title>
</head>
<body>
</body>

<script type="text/javascript">
var wsServer = 'ws://127.0.0.1:9501';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
  console.log("Connected to WebSocket server.");
};

websocket.onclose = function (evt) {
  console.log("Disconnected");
};

websocket.onmessage = function (evt) {
  console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) {
  console.log('Error occured: ' + evt.data);
};
</script>
</html>

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

Linux下源码包安装Swoole及基本使用操作图文详解

服务器端收到请求信息:

Linux下源码包安装Swoole及基本使用操作图文详解

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
php异常处理使用示例
Feb 25 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
php数组键名技巧小结
Feb 17 PHP
十个PHP高级应用技巧果断收藏
Sep 25 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
详谈PHP面向对象中常用的关键字和魔术方法
Feb 04 PHP
php实现自定义中奖项数和概率的抽奖函数示例
May 26 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 #PHP
phpStorm+XDebug+chrome 配置详解
Apr 01 #PHP
PHP+Oracle本地开发环境搭建方法详解
Apr 01 #PHP
phpstorm 配置xdebug的示例代码
Mar 31 #PHP
PHP文件后缀不强制为.php方法
Mar 31 #PHP
PHP中md5()函数的用法讲解
Mar 30 #PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
Mar 30 #PHP
You might like
PHP If Else(elsefi) 语句
2013/04/07 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
JS实现touch 点击滑动轮播实例代码
2017/01/19 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
Python 字典中的所有方法及用法
2020/06/10 Python
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
Kiehl’s科颜氏西班牙官方网站:源自美国的植物护肤品牌
2020/02/22 全球购物
UNIX文件系统分类
2014/11/11 面试题
日语专业个人的求职信
2013/12/03 职场文书
个人简历自我评价
2014/01/06 职场文书
公司培训欢迎词
2014/01/10 职场文书
学校安全责任书
2014/04/14 职场文书
2015年校长新年寄语
2014/12/08 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
工商行政处罚决定书
2015/06/24 职场文书
运动会100米广播稿
2015/08/19 职场文书
MySQL表的增删改查基础教程
2021/04/07 MySQL
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
Python实现天气查询软件
2021/06/07 Python