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函数
Oct 03 PHP
php 函数使用方法与函数定义方法
May 09 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
PHP高级编程实例:编写守护进程
Sep 02 PHP
php读取mssql的ntext字段返回值为空的解决方法
Dec 30 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 PHP
PHP对象相关知识总结
Apr 09 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
php微信公众号开发之现金红包
Apr 16 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 HandlerSocket的使用
2011/05/02 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
Angular实现响应式表单
2017/08/04 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
利用pandas合并多个excel的方法示例
2019/10/10 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Exception类的常用方法
2012/06/16 面试题
高中毕业生个人自我鉴定
2013/11/24 职场文书
实习生体会的自我评价范文
2013/11/28 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
安全宣传标语口号
2014/06/06 职场文书
运动会标语
2014/06/21 职场文书
初中思想品德教学反思
2016/02/24 职场文书