简单点,workerman的安装使用,参照官网。前端连接和发送参数,也都参照官网,自定义的参数,可以使用英文逗号‘,’隔开。
后端直接上代码:
<?php
use Workerman\Worker;
//require the need files
require_once(__DIR__ . '/../vendor/workerman/workerman/Autoloader.php');
$main_script = __DIR__ . '/../web/index.php';//引入了ci框架
$php_cmd = empty($_SERVER['_']) ? 'php' : $_SERVER['_'];//php路径
// 注意:这里与上个例子不同,使用的是websocket协议
$ws_worker = new Worker("websocket://0.0.0.0:8888");
// 启动4个进程对外提供服务
$ws_worker->count = 4;
// 当收到客户端发来的数据后返回hello $data给客户端
$ws_worker->onConnect = function ($connection) {
Worker::log("New Connection Init");
};
$ws_worker->onMessage = function ($connection, $data) use ($main_script, $php_cmd) {
if (empty($data)) {
$connection->send(json_encode(['type' => 'none', 'code' => 0]));
}
if (0 === strpos(strtoupper($data), 'FETCH')) { //判断是获取弹幕内容(自定义)
$elements = explode(',', $data); //解析参数
if (count($elements) == 4) { //参数个数(自定义)
$danmu = fetchDanmu($elements[1], $elements[2], $elements[3], $main_script, $php_cmd);
$connection->send($danmu);
}
} else {
$connection->send(json_encode(['type' => 'beat', 'data' => 'ok', 'code' => 0])); //其他方法(自定义)
}
};
$ws_worker->onClose = function ($connection) {
Worker::log("Connection closed");
};
// 运行worker
Worker::runAll();
function fetchDanmu($userID, $sectionID, $atVideoTime, $mainScript, $phpCmd)
{
$command = sprintf(
"%s %s %s %s",
$phpCmd,
$mainScript,
" commands/DanmuCommand fetchDanmu ", //查询弹幕的方法(自定义,此处是ci框架的脚本)
implode(' ', [$userID, $sectionID, $atVideoTime]) //查询弹幕的参数(自定义)
);
return exec($command);
}
新手建议,先按照官网,把demo做出来;然后一点一点去改,一步一步去打断点调试。