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