JavaScript - WebSocket send()方法不执行

时间:2017-10-29 22:29:41

标签: javascript java java-websocket

我编写了一个简单的客户端 - 服务器应用程序,客户端在Javascript中使用WebSocket,服务器使用Jetty库进行WebSocket。这是处理来自客户端的消息的服务器代码:

@OnWebSocketConnect
    public void onConnect(Session session) {

        System.out.println("Connected");
    }

    @OnWebSocketMessage
    public void onMessage(String message) {
        System.out.println(message);
    }

这是发送消息时客户端的代码:

function Search() {
"use strict";
sender = new WebSocket("ws://localhost:8080");
sender.send("Hello server");
sender.close();
}

因此,当我调用“搜索”功能时,服务器的输出为:

Server output

这意味着行sender.send("Hello server");未被执行。

但是当我在alert("connected");之后插入sender = new WebSocket("ws://localhost:8080");时,这是新输出:

New output

我已阅读有关send()的文档,但未解决此问题。你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

您不是在等待实际打开的连接。它与alert()一起使用的原因是你有时间让套接字完成连接。

试试这个:

sender = new WebSocket(...)

sender.onopen = function() {
  sender.send('Hello server')
  sender.close()
}

当连接准备发送和接收数据时,将设置为onopen的功能。

为什么?

执行new WebSocket()时,Javascript不会等到套接字完全连接后再转到下一行代码。该连接只是计划发生。

与Java 不同,这是您正在使用的另一种语言,执行通常会在继续之前阻止。

在你的作品中,你在创建套接字后立即调用close()。这将无法连接,然后断开连接。连接将永远不会完成,因为您只计划连接并立即取消连接。