我编写了一个简单的客户端 - 服务器应用程序,客户端在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();
}
因此,当我调用“搜索”功能时,服务器的输出为:
这意味着行sender.send("Hello server");
未被执行。
但是当我在alert("connected");
之后插入sender = new WebSocket("ws://localhost:8080");
时,这是新输出:
我已阅读有关send()
的文档,但未解决此问题。你知道为什么会这样吗?
答案 0 :(得分:0)
您不是在等待实际打开的连接。它与alert()
一起使用的原因是你有时间让套接字完成连接。
试试这个:
sender = new WebSocket(...)
sender.onopen = function() {
sender.send('Hello server')
sender.close()
}
当连接准备发送和接收数据时,将设置为onopen
的功能。
执行new WebSocket()
时,Javascript不会等到套接字完全连接后再转到下一行代码。该连接只是计划发生。
与Java 不同,这是您正在使用的另一种语言,执行通常会在继续之前阻止。
在你的作品中,你在创建套接字后立即调用close()
。这将无法连接,然后断开连接。连接将永远不会完成,因为您只计划连接并立即取消连接。