PHP的异步、并行、高性能网络通信引擎swoole的安装及websocket服务的使用
来源:互联网 发布:流体力学分析软件 编辑:程序博客网 时间:2024/06/08 06:15
点击进入本部分的视频教程
说明:swoole是PHP的异步、并行、高性能网络通信引擎,是一个和开发框架无关的PHP扩展,其本身是使用c开发的。其异步能力在一些地方能够和nodejs媲美。在PHP中异步和多线程一直是搭不上边的话题,但是swoole在底层做了非常优秀的实现。所以,如果你还在做简单的PHP开发那么这个是进阶的基础。当然为了工程化的解决方案在我的视频中结合了thinkPHP5来使用,当然thinkPHP5所做的工作使用其他框架也能实现。
在PHP中安装最新的swoole扩展
在PHP中安装swoole扩展的方法有两种,一种是源码安装,另外一种是使用pecl来安装。当然使用pecl来安装更为方便,如果还没有使用过pecl或者在你系统的命令行中输入pecl提示命令找不到那么请看我的另一篇文章http://blog.csdn.net/marswill/article/details/77188521使用pecl安装swoole的方式如下:
marswilldeMacBook-Pro:bin weiyongqiang$ pecl swoole
如何安装最新版
其实使用pecl安装的swoole是目前最新正式版的,版本为swoole1.9.19但是最新版本是swoole2.0.8是beta版
先使用pecl搜索swoole的扩展包版本:
pecl search swoole
在搜索的版本中可以看到swoole2.0.9的beta版本。安装时带上版本即可
pecl install swoole-2.0.9
在安装之后还有一部就是在php.ini中添加extension扩展。
extension=swoole.so //mac或者Linux系统extension=swoole.dll //Windows系统
最后请重启下php-fpm在Linux系统下是
service php-fpm restart
这样就会安装最新的版本,紧接着就是查看swoole扩展安装是否成功。在命令行执行:
php -m
如果在列表中有swoole就说明安装成功了。或者使用phpinfo()函数查看有没有swoole
写一个websocket服务
就这么简单,这样就构建了一个websocket服务。监听了本机的9501端口。下边我来解释下:
<?php/** * Created by PhpStorm. * Author: 魏永强 <hayixia606@163.com> * GitHub: https://github.com/gmars * Blog: http://blog.csdn.net/marswill * Date: 2017/9/14 * Time: 下午3:57 *///实例化一个swoole的websocket服务监听本机的9501端口$server = new swoole_websocket_server("0.0.0.0", 9501);//websocket的open事件。当open事件被触发时执行后边的function事件处理器,在事件处理器中有两个参数,一个为server另一个为客户端发送来的request。这儿和平常的http请求非常相似,注意了是相似而已。在请求对象中其实包含了客户端的id和其他信息在分析时可以打印出来分析。$server->on("open", function (swoole_websocket_server $server, $request) { echo "server: handshake success with fd{$request->fd}\n";});//这个是websocket的message事件。监听客户端发送来的消息事件$server->on("message", function (swoole_websocket_server $server, $frame) { echo "revice from {$frame->fd}:{$frame->data},opcode:{$frame->opcode}"; $dataArr = explode('@', $frame->data); $server->push($dataArr[1], $dataArr[0]);});//这个是websocket的客户端close事件$server->on("close", function ($ser, $fd) { echo "client {$fd} closed\n";});//定义完server要处理的事件以及处理器后需要【启动server】$server->start();
可能有人会有疑问,这个PHP文件应该放在哪儿?感觉在自己的框架中没地方放置呀。既不是控制器也不是函数。
其实这个文件可以放置在任何地方,在运行websocket服务时是使用PHP命令行来运行的。
php websocket.php //websocket是我对以上部分的文件命令
运行后命令行会处於挂起状态,这个不用去理会,当然最好的解决办法是写一个脚本来运行这部分PHP再监听服务是否关闭,关闭后重新挂起。
写一个websocket客户端
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Title</title> <style type="text/css"> #show{ width: 600px; height: 300px; overflow-y: scroll; } .my-message{ background-color: rgba(105, 105, 105, 0.64); color: #9e0505; width: 200px; float: right; padding: 10px; } .other-message{ background-color: rgba(105, 105, 105, 0.64); color: #9e0505; width: 200px; float: left; padding: 10px; } </style></head><body><div id="show"></div><div class="panel"> 内容:<textarea id="content"></textarea> 收信人:<input type="text" id="touser"> <input type="button" id="send-btn" value="发送"> <input type="button" id="close-btn" value="关闭"></div><script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script type="text/javascript"> var socket = new WebSocket("ws://127.0.0.1:9501"); $("#close-btn").click(function () { socket.close(); }) $("#send-btn").click(function () { var touser = $("#touser").val(); var content = $("#content").val(); var htmlstr = "<div><p class='my-message'>我:"+content+"</p></div>"; $("#show").append(htmlstr); socket.send(content+"@"+touser); }) socket.onmessage = function (p1) { var htmlstr = "<div><p class='other-message'>"+p1.data+"</p></div>"; $("#show").append(htmlstr); }</script></body></html>
这个是利用了HTML5的api来实现的一个简单的聊天室功能。当然使用nginx来代理websocket以及安全的wss协议的websocket我会在后边的文章中再来说明。对于这部分内容的更多解释请看视频教程。
有任何问题请给我留言
- PHP的异步、并行、高性能网络通信引擎swoole的安装及websocket服务的使用
- PHP的异步并行网络扩展swoole
- PHP的异步并行网络扩展swoole如何使用
- Swoole,PHP语言的高性能网络通信框架
- 使用php的swoole框架,实现高性能长连接websocket
- Swoole 高性能网络通信框架
- Yii2的异步多线程服务之swoole
- Yii2的异步多线程服务之swoole
- Swoole库PHP的SOCKET通信引擎,TCP/UDP,SOCKET服务器
- php-swoole安装遇到的问题
- 高性能、高并发网络通信系统的架构设计
- PHP+swoole+websocket聊天实时通信
- 【Swoole】PHP+Swoole的闭包写法
- 基于websocket和swoole的简易聊天室
- centos安装php扩展swoole及使用
- 基于TCP的协议封装及Netty搭建高可用网络通信服务
- swoole的安装
- Thrift可扩展高性能的通信服务框架
- POJ3273 Monthly Expense 二分法
- 人工智能入门简介及行业分析
- SAS数据集如何将为负数的部分,变为正数
- HDU 5127 Dogs' Candies【CDQ分治+动态凸包】
- 分析Hibernate:could not initialize proxy
- PHP的异步、并行、高性能网络通信引擎swoole的安装及websocket服务的使用
- [转]配置sonar、jenkins进行持续审查
- 综合 —— CORS 方式跨域访问
- 用Python的Turtle库绘制森林
- 第二篇:C语言的基本认识
- 当卷积层后跟batch normalization层时为什么不要偏置b
- 汇编语言之指令与寄存器
- 机器学习学习笔记.day10
- 第三篇:C语言的输入输出函数