【问题标题】:Socket.io Java client automatically disconnects after a few secondsSocket.io Java 客户端几秒钟后自动断开连接
【发布时间】:2018-09-16 15:56:50
【问题描述】:

我正在尝试保持服务器和我的 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();
        }
    }
} 

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

我也为我的服务器尝试了这个选项: {传输:['websocket'],升级:假}

或设置ping间隔和超时间隔

【问题讨论】:

    标签: java node.js socket.io


    【解决方案1】:

    我相信您的服务器是“http”服务器。这样,您可以保持连接处于活动状态,但您必须将其告知服务器。这是由请求标头完成的。所以,简单地说,我会发送“Connection: keep-alive”标头。此外,您的代码看起来不像 http 实现。所以,首先你应该开始实现“http”协议,然后发送“Connection: keep-alive”头。

    试图保持来自客户端的连接并不足以保持真正的连接。您必须同意服务器。

    检查如何在https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Keep-Alive 上保持 http 连接

    【讨论】:

    • 我不是想创建一个 HTTP 服务器,我正在使用 socket.io 运行一个 HTTP 服务器(查看socket.io,它使用 HTTP 长轮询连接到服务器,然后使用 WebSocket 传输数据),我正在尝试保持一个 socket.io 连接,该连接使用所谓的心跳功能来保持连接处于活动状态。心跳的工作方式类似于 ping/pong,其中服务器发送 ping 并且客户端以 pong 响应,但它不适用于我的 java 客户端。我尝试设置心跳间隔(ping 间隔)或设置超时间隔,但没有任何效果。
    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 2017-07-17
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多