JavaScript - метод send () WebSocket не выполняется

1

Я написал простое клиент-серверное приложение, в котором клиент использует 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() но не решает эту проблему. У вас есть идеи, почему это происходит?

Теги:
java-websocket

1 ответ

0

Вы не ожидаете, что соединение действительно откроется. Причина, по которой он работает с alert() заключается в том, что вы получаете время для соединения сокета.

Попробуй это:

sender = new WebSocket(...)

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

Функция, которую вы устанавливаете как onopen будет выполняться, когда соединение будет готово к отправке и приему данных.

Зачем?

Когда вы делаете new WebSocket(), Javascript не дожидается, пока сокет будет полностью подключен, прежде чем перейти к следующей строке кода. Соединение только что запланировано.

Это не похоже на Java, другой язык, который вы используете, где выполнение обычно блокируется, прежде чем двигаться дальше.

В своей части вы вызываете close() сразу после создания сокета. Это не приведет к подключению и отключению. Соединение никогда не будет завершено, поскольку вы только запланировали подключение и немедленно отменили его.

  • 0
    Спасибо за ваш ответ. Я использовал этот метод раньше, но, похоже, функция send () работает только внутри onopen (). Например, при выполнении этого кода: function Search () {"use strict"; sender = new WebSocket ("ws: // localhost: 8080"); sender.onopen = function () {sender.send («Привет, сервер!»); }; sender.send («Привет еще раз!»); sender.close (); } строки после onopen () должны выполняться, так как соединение установлено, но это не так. Сообщения должны отправляться только изнутри onopen ()? еще раз спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню