#java #javascript #networking #websocket
#java #javascript #сеть #веб-сокет
Вопрос:
Я планирую разработать клиентское приложение JavaScript, которое будет подключаться к Java-серверу с помощью websocket. Сервер должен обрабатывать множество подключенных клиентов. После некоторого чтения я обнаружил, что websocket — это одиночный поток. Это нехорошо, если я хочу запустить запрос к базам данных, который может заблокировать все на некоторое время.
О чем я думаю, так это об открытии отдельного websocket для каждого клиента JavaScript. Один сокет прослушивает новое соединение и при установлении соединения создает некоторый уникальный идентификатор. После этого открывается новый веб-сокет и отправляется идентификатор клиенту с помощью сокета прослушивателя. Когда клиент получил идентификатор, закройте первый сокет и подключитесь к новому.
Как вы думаете, это хорошее решение? Может быть, я чего-то не хватает?
Комментарии:
1. Не ответ, просто идея, вы рассматривали Node.js ? Я знаю, это javascript, но у вас есть такие вещи, как Sails ( sailsjs.org /#! ), которые выполняют операции CRUD с веб-сокетами так же, как и REST. Все просто, выполнив sails new <имя_проекта>.
2. Веб-сокеты не являются ни однопоточными, ни многопоточными, это просто протокол. На их реализации влияют ограничения потоков. Если ваша реализация Java Websocket может использоваться только из одного потока, перейдите к другой реализации.
Ответ №1:
Spring 4 дает вам возможность использовать пул потоков. Документация находится здесь: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html
Ответ №2:
Вы могли бы использовать Akka для управления всем параллелизмом и потоками за вас. Или вы могли бы использовать Play Framework, который уже построен на Akka и который довольно хорошо поддерживает WebSocket. С помощью Play вы можете выбирать между Java и Scala на стороне сервера.
Ответ №3:
Вы должны использовать NodeJS на сервере для обработки ввода-вывода сокета. Вы можете подключиться к нему через свои клиентские приложения на javascript, а затем выполнить вызовы вашего API на основе Java. NodeJS неблокирующий (асинхронный), и вы должны быть в состоянии использовать свои существующие навыки написания Javascripting для быстрой сборки приложения Node. Вы могли бы даже использовать полный средний стек для создания клиент-серверного приложения.http://meanjs.org / или http://mean.io /#!/ — это два популярных места для начала.