Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。本文将介绍如何使用Workerman来构建Websoket服务;
Workerman需要依赖pcntl扩展提供多线程、时钟等支持。pcntl扩展仅支持Linux和Mac平台。
pcntl扩展包含在php源码中,因此需要下载php源码,并从源码中生成pcntl扩展。
1>. 查看当前PHP版本(Mac自带PHP,注意要使用自主安装的PHP版本)
/Applications/XAMPP/xamppfiles/bin/php -v
2>. 下载对应版本的PHP源码
下载地址:https://www.php.net/releases/
3>. 生成pcntl扩展文件
## 解压PHP源码
tar -zxvf php-7.2.32.tar.gz;
## 进入源码中的ext/pcntl目录
cd php-7.2.32/ext/pcntl;
## 运行 phpize 命令
phpize;
## 运行 configure命令
./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config-7.2.32 --prefix=/Applications/XAMPP/xamppfiles/bin/php
## 运行 make 命令
make;
## 运行make install命令
sudo make install;
执行完以上命令后,会自动输出出pcntl.so扩展的位置,将其拖入 /Applications/XAMPP/xamppfiles/bin
文件夹;
7>. 打开 /Applications/XAMPP/xamppfiles/etc/php.ini
文件,配置 extension=pcntl.so
如下图:
8>. 重启Apache服务
use Workerman\Worker;
require_once __DIR__ . '../../../../vendor/autoload.php';
// Create a Websocket server
$ws_worker = new Worker('websocket://0.0.0.0:2346');
// 4 processes
$ws_worker->count = 4;
// Emitted when new connection come
$ws_worker->onConnect = function ($connection) {
echo "New connection
";
};
// Emitted when data received
$ws_worker->onMessage = function ($connection, $data) {
// Send hello $data
$connection->send('Hello ' . $data);
};
// Emitted when connection closed
$ws_worker->onClose = function ($connection) {
echo "Connection closed
";
};
// Run worker
Worker::runAll();