2015-06-02 5 views
2

Мое веб-приложение использует javascript для связи с сервером по HTTP-запросам. Однако серверное программное обеспечение изменено таким образом, что вместо использования HTTP-запросов он использует связь WebSocket.WebSockets: Сделайте javascript дождитесь ответа сервера

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

Что я хочу достичь, так это добавить модуль javascript, который обменивается данными через WebSockets, но все же в порядке ответа на запрос. Думаю, это означает, что я должен «приостановить» javascript до тех пор, пока сервер не ответит на мои сообщения в WebSocket? Потому что с HTTP-запросами мое веб-приложение ждало, пока на запрос не поступит ответ.

Итак, я думаю, это сводится к следующему: Как я могу сделать javascript до тех пор, пока сервер не отправит сообщение WebSocket?

Приветствия

EDIT: Для того, чтобы указать, мой код Javascript использует HTTP запросов по всему исходному коду с помощью функции я назвал «получить (URL)». Я хочу изменить эту функцию, чтобы она отправила сообщение WebSocket, ждет ответа и возвращает ответ. Есть идеи?

+0

Если вы не видите точку с помощью WebSockets, почему не будет вы просто придерживаетесь вызовов Ajax, как сейчас? –

+0

Вы в основном хотите имитировать синхронные запросы ajax, но с веб-сокетами? – Robin

+0

Предположительно даже с вызовами AJAX ваш код был * асинхронным *, нет? Вам просто нужно заменить механизм on-AJAX-response-invoke-callback механизмом on-specific-websocket-message-invoke-callback. – deceze

ответ

1

Если я правильно вас понимаю из комментариев, вы фактически не хотите «приостанавливать» свой Javascript, а просто заменять асинхронные вызовы ajax с помощью обмена через интернет.

Вы отправляли сообщение на сервер с заранее определенным ключом, как на сервере. Тогда вы могли бы получить какую-то полезную нагрузку в сообщении, если хотите, а затем выполнить функцию обратного вызова с данными, которые вы получаете. Ниже приведен пример, где я сделал что-то подобное для простого приложения чата, которое я создал.

Мой код клиента: Код

socket.emit('join', options, function(res){ 
    _printToChat(res); 
}); 

Сервер:

socket.on('join', function(roomname, fn){ 
    socket.join(roomname); 
    fn('You joined ' + roomname); 
}); 

Это посылает messge с ключом "присоединиться", и функция вызывается с ответом от сервера. В этом случае res в клиенте будет «Вы присоединились» + имя места.

Вы, вероятно, сделать что-то вроде:

код клиента:

socket.emit('getSomeResource', options, function(res){ 
    // do something with response in res variable. 
}); 

Серверный код:

socket.on('getSomeResource', function(yourOptions, fn){ 
    fn(resourceToReturn); 
}); 
+0

Проблема в том, что в моем js-коде я делаю много HTTP-запросов. Изменение всех этих вызовов методов и добавление обратного вызова для каждого из них будет слишком утомительным. Поэтому я хочу «обмануть» мой код js, чтобы подумать, что он отправляет http-запросы, когда это фактически сообщение WebSocket. – gromit190

+0

Вот почему мне нужно «приостановить» его. Поддельный вызов метода запроса должен дождаться ответа и вернуть его ... – gromit190

+0

См. Редактирование в исходном сообщении, я думаю, что должно быть яснее, что я пытаюсь сделать – gromit190