2013-05-02 3 views
3

Я внедряю API-интерфейс Client-Server с длительным временем обработки работы (в некоторых случаях порядка нескольких минут). Некоторые вызовы api короткие и отвечают немедленно, но купе требуют некоторой внутренней обработки. Я использую node.js в качестве веб-сервера. Мой текущий implementaion выглядит следующим образом -Async RestFul vs Websocket

Клиент (браузер) < -> узел JS < -> двигатель

Двигатель является фоновым процессом, который обрабатывает каждую работу (C++ код). Все взаимодействия - это http. Теперь, традиционно, я бы использовал длинные рабочие места, такие как async ajax/restful запросы и короткие задания как синхронизирующие запросы.

Я буду иметь статус обновления для длинных рабочих мест обработки (обработка больших объемов данных) - как промежуточные результаты, процент завершения и т.д.

Я loolking в WebSockets в качестве альтернативы (и я относительно новым для него). Вот мои вопросы -

  1. Должен ли я смотреть в WebSockets для длинных рабочих мест вместо асинхронной RESTful API (я хотел бы, чтобы избежать работы с клиентами-таймаут, продолжительная опроса и т.д.)?
  2. Как насчет перемещения всех запросов на веб-сайты (зачем вообще вообще отдыхать?)
  3. В целом, любые рекомендации по реализации этой архитектуры. (Раньше я работал над проектами со взаимодействием между веб-сервером и движком в качестве простого TCP-соединения с пользовательскими командами.)

ПРИМЕЧАНИЕ. - Меня не беспокоит поддержка кросс-браузера (особенно в старых версиях) Теперь.

+0

Как показано ниже, nodejs отлично играет с веб-сайтами, используя socket.io. Если браузер не поддерживает веб-сайты, он переходит к другому протоколу, но все же работает. Я думаю, что это был бы eaiser, чем поиск C++-решения. – coffekid

ответ

1

Я реализовал API-интерфейс Client-Server, используя веб-порты для связи между браузером и бэкэнд C++. Библиотека, которую мы использовали, была libwebsockets http://git.warmcat.com/cgi-bin/cgit/libwebsockets/

Как долго работающие, так и одновременные команды работали очень хорошо на веб-сайтах. Несколько запросов могут быть отправлены от клиента, и сервер может ответить, когда он будет готов, и может отправить ответы обратно из строя (или объединить ответы в один ответ).

Тайм-аут & Долгий опрос, необходимый с помощью Ajax, становится проще, например. клиентские разъединения могут быть обнаружены сервером при разрыве сокета.

Что касается лучших практик, я основывал свой дизайн на этих статьях. Мы использовали JSON для кодирования сообщений.

Если ваш сервер Node.js вы можете посмотреть в Socket.io. Это абстрагирует слой связи и может выбирать между ajax, websockets и т. Д. В зависимости от того, что доступно.