java - Socket.io Java客户端在几秒钟后自动断开连接

标签 java node.js socket.io

我正在尝试保持服务器和我的 java 客户端之间的连接。这是我的代码:

import io.socket.client.*;
import io.socket.client.IO;
import java.net.URISyntaxException;

public class Main {
    public static void main(String[] args) throws URISyntaxException, InterruptedException {
        IO.Options opts = new IO.Options();
        opts.reconnection = true;
        Socket socket = IO.socket("http://localhost:3000", opts);
        socket.connect();
        socket.on("disconnect", args123 -> System.out.println("disconnect"));
        Thread t = new Thread(new test(socket));
        t.start();
    }
}

class test implements Runnable{
    private Socket socket;
    public test(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            Thread.sleep(3000);
            socket.emit("test","test");
            System.out.println("test");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
} 

线程中的测试事件没有到达服务器,因为我的客户端自动断开连接。

我也为我的服务器尝试过这个选项: {transports: ['websocket'], 升级: false}

或者设置ping间隔和超时间隔

最佳答案

我相信您的服务器是“http”服务器。这样,您就可以保持连接处于 Activity 状态,但您必须将此告诉服务器。这是通过请求 header 完成的。所以,简单地说,我会发送“Connection:keep-alive” header 。此外,您的代码看起来不像 http 实现。因此,首先您应该开始实现“http”协议(protocol),然后发送“Connection: keep-alive” header 。

尝试保持与客户端的连接并不足以使其真正保持 Activity 状态。您必须同意服务器。

检查如何保持 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Keep-Alive 上的 http 连接处于 Activity 状态。

关于java - Socket.io Java客户端在几秒钟后自动断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52355872/

相关文章:

java - RandomWalk.java 卡住了

Java:错误:不支持发行版 13

node.js - 差异 websocket.io socket.io

mysql - 如何将我的查询转换为 Sequelize 查询?

java - 注入(inject)非 bean 属性的最佳实践

java - 在 libgdx gwt Web 应用程序中找不到字体文件

javascript - 是否可以在 Node js 中执行一组包括系统重启的步骤?

node.js - 如何在node.js服务器中调试socket.io的模拟浏览器客户端

javascript - NodeJS 和 Socket.IO

node.js - 在某种轮询中获取 404 - 使用express-generator的新nodejs项目