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





