workerman 开源异步PHP socket 即时通讯框架
文档:http://doc3.workerman.net/315128
安装 libevent(php<7) 或者 Event 扩展(php >=7)
step1 不论php版本,都要安装 libevent 扩展:
yum install libevent-devel -y
step2 php > 7 就安装 Event扩展
pecl.php.net
wget https://pecl.php.net/get/event-2.4.3.tgz
解压:
tar xf event-2.4.3.tgz
cd event-2.4.3
编译:
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
修改php.ini
extension = event.so
/etc/init.d/php-fpm restart
检测workman环境是否安装成功
curl -Ss http://www.workerman.net/check.php | php
如果成功,则显示:
安装框架:
git clone https://github.com/walkor/Workerman
#实现简单的http服务器
worker_http.php (和Workerman文件夹同级)
onMessage = function($connection,$data){
$connection->send('Hello Workerman HTTP');
};
Worker::runAll();
php worker_http.php start
php worker_http.php start -d 让该进程成为一个守护进程,在后台运行
#实现websocket
require_once 'Workerman/Autoloader.php';
use Workerman\Worker;
$ws = new Worker('websocket://0.0.0.0:8880');
$ws->onMessage = function($connection,$data){
$connection->send('hello websocket');
};
Worker::runAll();
Worker 类 用于实现端口的监听,并可以设置客户端的连接事件,连接上消息事件,连接断开事件的回调函数,从而实现业务处理
$worker = new Worker($listen,$context)
$content 用于传递socket的上下文选项
$listen string 格式 协议:// 允许连接的ip地址:端口
协议只可以是以下六种:
TCP tcp://0.0.0.0:8686
UDP udp://0.0.0.0:8686
unix unix:///tmp/my_file
http http://0.0.0.0:8686
websocket ws://0.0.0.0:8686
text text:0.0.0.0:8686 text协议是workerman内置的文本协议,兼容telnet协议
$worker-count = 4; 指定启动的进程数
master进程 是父进程
worker进程 是子进程
master进程管理 worker进程 ,实际监听端口的活 由 worker进程来干
demo : 对特定id的进程特殊处理
注意这里的id并不是worker进程的pid,而是worker自己对worker进程编的号,从0 开始
require_once 'Workerman/Autoloader.php';
use Workerman\Worker;
$listen = 'http://0.0.0.0:8880';
$worker = new worker($listen);
$worker->name ='chat';
$worker->count = 4;
$worker->onWorkerStart = function($worker){
echo 'worker id...'.$worker->id.PHP_EOL;
if($worker->id == 2){
echo 'this is worker id 2'.PHP_EOL;
}
};
Worker::runAll();