我编写了一个简单的客户端-服务器应用程序,其中客户端使用 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();
}
所以当我调用“搜索”函数时,服务器的输出是这样的:
这意味着 sender.send("Hello server");
行未执行。
但是当我在 sender = new WebSocket("ws://localhost:8080");
之后插入 alert("connected");
时,这是新的输出:
我已阅读有关 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/