以下是 Workerman 在 Ubuntu 上的部署使用步骤:
1. 安装 PHP 和 PHP 扩展
首先,需要安装 PHP 和一些必要的 PHP 扩展,比如 `pcntl` 和 `posix` 扩展。可以使用以下命令进行安装:
sudo apt-get install php php-pcntl php-posix
安装event扩展:
注意提示:Include libevent OpenSSL support [yes] :
时输入no
回车,其它直接敲回车就行
Event扩展不是必须的,当业务需要支撑大于1000的并发连接时,推荐安装Event,能够支持巨大的并发连接。如果业务并发连接比较低,例如1000以下并发连接,则可以不用安装。
pecl install event
php.ini文件添加
extension=event.so
2. 下载 Workerman
可以通过 Git 下载 Workerman:
git clone https://github.com/walkor/Workerman.git
也可以直接下载压缩包,然后解压:
wget https://github.com/walkor/Workerman/archive/master.zip
unzip master.zip
3. 创建一个简单的 PHP 脚本
创建一个简单的 PHP 脚本,例如 `hello.php`,用于测试 Workerman 是否正常工作:
<?php
use Workerman\Worker;require_once __DIR__ . '/Workerman/Autoloader.php';
$worker = new Worker('websocket://0.0.0.0:8080');
$worker->onMessage = function($connection, $data) {
$connection->send('Hello, ' . $data);
};Worker::runAll();
这个脚本创建了一个 WebSocket 服务器,监听 8080 端口,并在收到消息时回复一个简单的消息。
4. 运行 PHP 脚本
使用以下命令运行 PHP 脚本:
php hello.php start
这个命令会启动一个 Workerman 服务器,并监听 8080 端口。
5. 测试服务器
使用 WebSocket 客户端测试服务器是否正常工作。可以使用浏览器中的 JavaScript WebSocket 客户端,或者使用命令行工具 `wscat`。
wscat -c ws://localhost:8080
连接成功后,可以输入一些消息并查看服务器是否回复了相应的消息。
这就是在 Ubuntu 上部署和使用 Workerman 的基本步骤。如果需要更多的功能和配置选项,请参考 Workerman 的文档。
6.入口文件编写
点对点发送消息示例:
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 注意:这里与上个例子不同,使用的是websocket协议
$worker = new Worker("websocket://0.0.0.0:2000");
// 启动4个进程对外提供服务
$worker->count = 4;
//保存连接ID
$connectList = [];
// 监听WebSocket消息事件
$worker->onMessage = function(TcpConnection $connection, $data) use(&$connectList) {
$dataArray = json_decode($data,true);
if(!empty($dataArray['type']) && $dataArray['type'] == 'message'){
$uid = $dataArray['toClient'];
$message = $data;
$targetConnection = $connectList[$uid];
$targetConnection->send($message);
} elseif (!empty($dataArray['type']) && $dataArray['type'] == 'connect') {
// 将用户id和连接id绑定起来
$uid = $dataArray['uid'];
$connection->uid = $uid;
$connectList[$uid] = $connection;
}
};
// 监听WebSocket连接建立事件
$worker->onConnect = function($connection){
// echo "new connection from ip " . $connection->getRemoteIp() . "\n";
};
// 监听WebSocket连接关闭事件
$worker->onClose = function($connection) use(&$connectList) {
$uid = array_search($connection, $connectList);
unset($connectList[$uid]);
};
// 运行worker
Worker::runAll();