Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

启动websocket,在heartbeat_check_interval时间之内有收到消息, 但服务端断开了 #6727

Open
crytjy opened this issue Apr 30, 2024 · 11 comments
Labels
question Further information is requested

Comments

@crytjy
Copy link

crytjy commented Apr 30, 2024

启动websocket, 在heartbeat_check_interval时间之内有收到消息, 但服务端偶尔断开了

[
        'name'      => 'ws',
        'type'      => Server::SERVER_WEBSOCKET,
        'host'      => '0.0.0.0',
        'port'      => (int)env('WS_PORT', 9509),
        'sock_type' => SWOOLE_SOCK_TCP,
        'callbacks' => [
            // 自定义握手处理
            Event::ON_HAND_SHAKE => [Hyperf\WebSocketServer\Server::class, 'onHandShake'],
            Event::ON_MESSAGE    => [Hyperf\WebSocketServer\Server::class, 'onMessage'],
            Event::ON_CLOSE      => [Hyperf\WebSocketServer\Server::class, 'onClose'],
        ],
        'settings'  => [
            // 设置心跳检测
//            'heartbeat_idle_time'      => 180,
            'heartbeat_check_interval' => 70,
        ]
    ];
@crytjy crytjy added the question Further information is requested label Apr 30, 2024
@huangdijia
Copy link
Member

composer info | grep hyperf

看看版本

@crytjy
Copy link
Author

crytjy commented May 7, 2024

image

@crytjy
Copy link
Author

crytjy commented May 7, 2024

composer info | grep hyperf

看看版本

使用的都是V2版本的, 可以确定客户端并没有主动断开

@huangdijia
Copy link
Member

这个版本有点老了😂

@guandeng
Copy link
Contributor

guandeng commented May 7, 2024

composer info | grep hyperf
看看版本

使用的都是V2版本的, 可以确定客户端并没有主动断开

是在本地测试?还是经过nginx代理了?

@crytjy
Copy link
Author

crytjy commented May 7, 2024

composer info | grep hyperf
看看版本

使用的都是V2版本的, 可以确定客户端并没有主动断开

是在本地测试?还是经过nginx代理了?

nginx代理

@guandeng
Copy link
Contributor

guandeng commented May 7, 2024

composer info | grep hyperf
看看版本

使用的都是V2版本的, 可以确定客户端并没有主动断开

是在本地测试?还是经过nginx代理了?

nginx代理

proxy_read_timeout这个有配置吗

@crytjy
Copy link
Author

crytjy commented May 7, 2024

composer info | grep hyperf
看看版本

使用的都是V2版本的, 可以确定客户端并没有主动断开

是在本地测试?还是经过nginx代理了?

nginx代理

proxy_read_timeout这个有配置吗

这个配置的60s, 但是客户端的心跳是30s,

@lazychanger
Copy link
Contributor

nginx配置可以发出来看看嘛?

@crytjy
Copy link
Author

crytjy commented May 10, 2024

nginx配置可以发出来看看嘛?

upstream wshost{
    ip_hash;
    server 127.0.0.1:9509;
}


server {
    listen 80;

    # 绑定的域名,填写您的域名
    server_name xxx.com;

    location / {
         # WebSocket Header
        proxy_http_version 1.1;
        proxy_set_header Upgrade websocket;
        proxy_set_header Connection "Upgrade";

        # 将客户端的 Host 和 IP 信息一并转发到对应节点
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;

        # 客户端与服务端无交互 60s 后自动断开连接,请根据实际业务场景设置
        proxy_read_timeout 60s ;

        # 执行代理访问真实服务器
        proxy_pass http://wshost;
    }

    location ~ /\.ht {
        deny all;
    }

    location ^~ /ssl {
        deny all;
    }

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log main;
}

这样配置的

@lazychanger
Copy link
Contributor

去掉timeout试试。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

4 participants