JavaScript - WebSocket send() 方法未执行

标签 javascript java java-websocket

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

@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"); 行未执行。

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

New output

我已阅读有关 send() 的文档,但它没有解决此问题。您知道为什么会发生这种情况吗?

最佳答案

您没有等待连接实际打开。它与 alert() 配合使用的原因是您可以为套接字完成连接赢得时间。

试试这个:

sender = new WebSocket(...)

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

当连接准备好发送和接收数据时,将执行您设置为onopen的函数。

为什么?

当您执行new WebSocket()时,Javascript不会等到套接字完全连接后再继续执行下一行代码。连接刚刚按计划发生。

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

在您的作品中,您在创建套接字后立即调用close()。这不会连接然后断开连接。连接永远不会完成,因为您仅安排一个连接并立即取消它。

关于JavaScript - WebSocket send() 方法未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47005916/

相关文章:

javascript - 在javascript时钟中的单个字符前添加填充0

java - 在 Java 中获取鼠标的精确坐标

java - Websockets Tomcat 7 在现有项目中不起作用

javascript - 将第一个查询中选定的 id 行传递到第二个查询中使用

javascript - Instafeed.js - Instagram 脚本 CSS 样式不适用于元素

javascript - 在 squeeze 上安装 node-js 最新版本的问题

java - Junit 在我的测试用例中断言 OR 条件

java - 如何确定 reducer 的值(value)?

java - WebSocket 的 ClientEndpoint 接收数据的顺序是否与 ServerEndpoint 发送的顺序相同?

java - 如何防止值强烈引用其键?