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 相关文章推荐
Windows7下PHP开发环境安装配置图文方法
May 20 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
php内嵌函数用法实例
Mar 20 PHP
浅析iis7.5安装配置php环境
May 10 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
Dec 09 PHP
PHP中类的继承和用法实例分析
May 24 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 PHP
PHP实现链表的定义与反转功能示例
Jun 09 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 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后门代码解析
2014/07/05 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
浅析node.js中close事件
2014/11/26 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
React Router基础使用
2017/01/17 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
浅谈Node.js 子进程与应用场景
2018/01/24 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
原生JS实现DOM加载完成马上执行JS代码的方法
2018/09/07 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
解决Python中字符串和数字拼接报错的方法
2016/10/23 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
python实现简单多人聊天室
2018/12/11 Python
python模拟斗地主发牌
2020/04/22 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
2014/03/07 HTML / CSS
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
法国低价在线宠物商店:bitiba.fr
2020/07/03 全球购物
计算机操作自荐信
2013/12/07 职场文书
运动会通讯稿50字
2014/01/30 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
个人近期表现材料
2014/02/11 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript