10分钟快速使用workerman建立websocket服务 本文共有2420个字,关键词: ###workerman官方介绍: >workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。 >workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。 workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。 ###特性 >> 支持HHVM 使用PHP开发 支持PHP多进程/多线程(多线程版本) 标准输入输出重定向 支持毫秒定时器 支持基于事件的异步编程 守护进程化 支持TCP/UDP 支持多端口监听 接口上支持各种应用层协议 支持libevent事件轮询库,支持高并发 支持服务平滑重启 支持PHP文件更新检测及自动加载 支持PHP长连接 支持以指定用户运行子进程 支持telnet远程控制 高性能 ###3步快速建立服务: 1、安装 >下载后解压即可 下载地址:https://www.workerman.net/download/workermanzip 2、新建文件start.php ``` count = 4; //增加定时器 $ws_worker->onWorkerStart = function($ws_worker) { //指定一个进程做计时器,若不指定会出现所有进程都会执行这个定时器 if ($ws_worker->id === 0) { Timer::add(1, function () { #定时器主体代码,可以进行定时发送消息等操作 }, array(), true); } } // 当收到客户端发来的数据后返回hello $data给客户端 $ws_worker->onMessage = function($connection, $data) { // 向客户端发送hello $data $connection->send('hello ' . $data); }; // 运行 Worker::runAll(); ``` 3、启动服务: `php start.php start -d` ![启动workerman预览](https://blog.ww4k.com/usr/uploads/2019/08/2058841682.png) 4、查看workerman运行状态类似如下: `php start.php status` 至此三步完成开启wokerman,后边只需要对定时器或onMessage中进行相应的逻辑编码即可。 客户端可以直接用js进行连接。一定要注意隔一段时间发送一个心跳包和服务端进行互动。否则连接会中断无法收到服务端推送的消息。 ###官方性能测试结果: 测试环境 系统:ubuntu 12.04 LTS 64位 内存:8G cpu:Intel® Core™ i3-3220 CPU @ 3.30GHz × 4 测试代码: ``` count=3; $worker->onMessage = function($connection, $data) { // 长连接 $connection->send("HTTP/1.1 200 OK\r\nConnection: keep-alive\r\nServer: workerman\1.1.4\r\n\r\nhello"); // 短连接 //$connection->close("HTTP/1.1 200 OK\r\nServer: workerman\1.1.4\r\n\r\nhello"); }; Worker::runAll(); ``` 测试结果: ``` 短链接(每次请求完成后关闭链接,下次请求建立新的链接): 条件: 压测脚本开500个线程,每个线程链接Workerman 10W次,每次链接发送1个请求 结果: 吞吐量:3W/S , cpu:60% , 内存占用:4*8M = 32M ``` ``` 长链接(每次请求后不关闭链接,下次请求继续复用这个链接): 条件: 压测脚本开1000个线程,每个线程链接Workerman 1次,每个链接发送10W请求 结果: 吞吐量:15.6W/S , cpu:68% , 内存占用:4*8M = 32M ``` ###官方文档: [workerman官方文档](http://doc.workerman.net/ ?_blank) × yihong (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 PHP 2019-08-21 评论 5639 次浏览