workerman是命令行启动的
workerman本身已经是一个类似apache/nginx的容器,只要PHP环境OK workerman就可以运行。
长连接必须加心跳
长连接长时间不通讯肯定会被防火墙干掉而断开。
http://doc.workerman.net/faq/heartbeat.html(心跳说明)
客户端和服务端协议一定要对应才能通讯
不要尝试在浏览器地址栏访问websocket协议端口,不要尝试用webscoket协议访问裸tcp协议端口,协议一定要对应
连接失败可能的原因
刚开始使用workerman时很常见的一个问题是客户端连接服务端失败。 原因一般如下: 1、服务器防火墙(包括云服务器安全组)阻止了连接 (50%几率是这个) 2、客户端和服务端使用的协议不一致 (30%几率) 3、ip或者端口写错了 (15%的几率) 4、服务端没启动
不要使用exit die sleep语句
执行exit die语句会导致进程退出,并显示WORKER EXIT UNEXPECTED错误
如果需要返回,可以调用return。sleep语句会让进程睡眠,睡眠过程中不会执行任何业务,框架也会停止运行,会导致该进程的所有客户端请求都无法处理
改代码要重启
workerman是常驻内存的框架,改代码要重启workerman才能看到新代码的效果
支持TCP、UDP
WorkerMan支持TCP和UDP两种传输层协议,只需要更改一个属性便可以更换传输层协议,业务代码无需改动。
服务器安装
命令行运行(此步骤包含了安装php-cli主程序以及pcntl、posix、libevent库及git程序)
yum install php-cli php-process git gcc php-devel php-pear libevent-devel -y
安装event扩展,命令行运行,
event扩展要求PHP>=5.4,PHP5.3用户请安装libevent扩展
pecl install event
注意提示:Include libevent OpenSSL support [yes] : 时输入no回车,
注意提示:PHP Namespace for all Event classes :时输入yes,其它直接敲回车就行
命令行运行(此步骤是配置event扩展的ini配置,如果ini文件位置不对,可以通过运行php --ini找到实际加载的ini文件路径)
echo extension=event.so > /etc/php.d/30-event.ini
结束以上步骤之后,可进行拉取wokerman的代码,这边以Workerman源代码为例
git clone https://github.com/walkor/Workerman
克隆完之后,cd到这个项目的位置,新建一个文件 ws_test.php(示例)
touch ws_test.php
然后编辑这个新建的文件
vim ws_test.php
粘贴一下代码:
<?php
use Workerman\Worker;
require_once __DIR__ . '/Workerman/Autoloader.php';
// 注意:这里与上个例子不同,使用的是websocket协议
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// 启动4个进程对外提供服务
$ws_worker->count = 4;
// 当收到客户端发来的数据后返回hello $data给客户端
$ws_worker->onMessage = function($connection, $data)
{
// 向客户端发送hello $data
$connection->send('hello ' . $data);
};
// 运行worker
Worker::runAll();
然后退出,执行命令
php ws_test.php start
出现以下画面表示成功!
如果执行php命令的时候无法出现以上的画面,那么请执行以下命令,之后在执行php运行的代码即可解决
composer install
刚开始接触workerman,觉得有用的,表个喜欢,欢迎指教!