Socket.IO 中设置了定时器 定时器有时候会自动停止

jicz117

Socket.IO 中设置了定时器 定时器定时60s向客户端发送信息 定时器有时候会自动停止,而客户端部分会发送 载入页面时与 ws://127.0.0.1:2222/socket.io/?EIO=3&transport=websocket&sid=6e1428c5b860d641000aedfc 的连接被中断
然后一直发送get http://127.0.0.1:2222/socket.io/ 如图
不知为何

3732 4 0
4个回答

jicz117

这个有的时候会发送 如图

  • 暂无评论
walkor

可能是业务逻辑有些细节没处理好。截图里看不出什么问题。

  • 暂无评论
keytehu

我局的是定时器运行的业务代码出现致命错误了,导致进程退出重启了。

  • 暂无评论
jicz117

就是我定时器里面执行的代码业务有问题是吗?
服务端代码:

$sender_io = new SocketIO(2222);
// 客户端发起连接事件时,设置连接socket的各种事件回调
$sender_io->on('connection', function($socket){
    // 当客户端发来登录事件时触发
    $socket->on('login', function ()use($socket) {
        global $Game;
        $send = $Game->start();
        $socket->emit('select2m', "{$send}");
    });
    // 当客户端断开连接是触发(一般是关闭网页或者跳转刷新导致)
    $socket->on('disconnect', function () use($socket) {
        if (!isset($socket->uid)) {
            return;
        }
    });
});
$sender_io->on('workerStart', function() {
    Timer::add(60, function()
    {   global $Game,$sender_io;
        echo "ready".date('y-m-d h:i:s',time())."\r\n";
        $send = $Game->start();     
        $sender_io->emit('select2m', "{$send}");
        echo "sendOk".date('y-m-d h:i:s',time())."\r\n";
    });
});

客户端代码:

$(document).ready(function () {
    // 连接服务端
    var socket = io('http://'+document.domain+':2222');
    // 连接后登录
    socket.on('connect', function(){
        。。。。。。。。
    socket.on('select2m', function(online_stat){
        var reg=/U/g;
        online_stat = online_stat.replace(reg,"<br/>");
        $('#select2m').html(online_stat)
        var d = new Date();
        var sec = d.getSeconds();
        console.log(sec);
    });
  • 暂无评论
年代过于久远,无法发表回答
🔝