Я написал простое клиент-серверное приложение, в котором клиент использует WebSocket в Javascript, и сервер использует библиотеку 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()
но не решает эту проблему. У вас есть идеи, почему это происходит?
Вы не ожидаете, что соединение действительно откроется. Причина, по которой он работает с alert()
заключается в том, что вы получаете время для соединения сокета.
Попробуй это:
sender = new WebSocket(...)
sender.onopen = function() {
sender.send('Hello server')
sender.close()
}
Функция, которую вы устанавливаете как onopen
будет выполняться, когда соединение будет готово к отправке и приему данных.
Когда вы делаете new WebSocket()
, Javascript не дожидается, пока сокет будет полностью подключен, прежде чем перейти к следующей строке кода. Соединение только что запланировано.
Это не похоже на Java, другой язык, который вы используете, где выполнение обычно блокируется, прежде чем двигаться дальше.
В своей части вы вызываете close()
сразу после создания сокета. Это не приведет к подключению и отключению. Соединение никогда не будет завершено, поскольку вы только запланировали подключение и немедленно отменили его.