js websocket连接失败的问题?
我后端使用spring boot写的websocket服务,前端用js写的WebSocket连接,我想自定义websocket的header头,于是就有了下面的代码:
let socket = new WebSocket('ws://localhost:8888/text',["accessKey","123124123","accessSecret","123123fawef"]);
然后我运行网页,浏览器报错:websocket connection to 'ws://localhost:8888/text' failed;
此时后端看TRACE日志,返回的是101,证明服务端是没有问题的。
于是我看了一下我的网页的网络请求,发现websocket在连接服务器的时候发送了一条空的信息,如下截图:
接下来是消息
然后我把后面的protocols的值去掉之后是可以正常连接的,而且消息里面并没任何东西
想请教一下各位,这种情况应该怎么处理。
这是服务端日志
明显是已经建立了session的。
回答:
你客户端既然在请求里携带了 Sec-WebSocket-Protocol
标头,那你服务端也要在响应里同样返回一个 Sec-WebSocket-Protocol
啊。你服务端没返回,客户端当然认为是服务端不支持这些子协议,自然就认为连接失败了。
P.S.1 你自己实现的 Java 客户端里压根也没有用到子协议啊……
P.S.2 从你传递的子协议的值来看,似乎你对子协议似乎有什么神奇的误解……可以看我之前的这篇回答(https://segmentfault.com/q/1010000022700936)。通俗(但并非完成正确)理解的话,对客户端来说约等于 HTTP 请求标头里的 Accept
,对服务端来说约等于 HTTP 响应标头里的 Content-Type
。
回答:
我用java写了个客户端,发现是可以正常连接服务,并且能正常发送数据的。
public static void main(String[] args) throws URISyntaxException { WebSocketClient webSocketClient = new WebSocketClient(new URI("ws://localhost:8888/text")) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
log.info("open");
}
@Override
public void onMessage(String s) {
log.info(s);
}
@Override
public void onClose(int i, String s, boolean b) {
log.info("close");
}
@Override
public void onError(Exception e) {
log.info(e.toString());
}
};
webSocketClient.connect();
Scanner scanner = new Scanner(System.in);
webSocketClient.send(scanner.next());
System.out.printf(scanner.next());
}
下面是控制台返回数据
是不是js的websocket对象有什么bug,还是需要做一些特殊的处理?
以上是 js websocket连接失败的问题? 的全部内容, 来源链接: utcz.com/p/945100.html