使用workerman开发弹幕功能

简单点,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做出来;然后一点一点去改,一步一步去打断点调试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值