2016-10-25 12 views
-1

Моя цель - использовать WebSockets с собственным стеком TCP/IP или ISO/OSI. Я хочу загрузить баланс всех запросов от клиента на сервер приложений (поскольку мы знаем, что WebSockets может работать только с одним сервером, который установил соединение). Я хочу иметь возможность подключиться к одному узлу и отправлять запросы на любой узел.Как написать собственный стек TCP/IP или ISO/OSI для использования WebSockets без использования рукопожатия каждый раз?

Алгоритм является следующим:
1. Клиент устанавливает соединение с одним из узлов за балансировщиком нагрузки.
2. Клиент отправляет данные через WebSocket в балансировщик нагрузки.
3. Балансировщик нагрузки получает данные и отправляет их на любой сервер.
4. Сервер видит данные и отправляет их в приложение. Даже если соединение не установлено, сервер не отбрасывает пакеты, он просто отправляет пакеты в приложение.

В этой ситуации мы можем легко загрузить балансные запросы WebSockets. Я попытался понять, как переписать стек TCP/IP и передать пакеты прямо в приложение в пользовательском пространстве, но я смущен.

Нужно ли нам использовать DPDK? Да, тогда вы можете показать минимальный пример того, как получать и отправлять пакеты напрямую или как пропускать проверку соединения? Если нет, то что нам нужно использовать в этой ситуации?

+1

Перезаписать стек TCP/IP? Удачи с этим. Если вы описываете фактическую проблему (не описывая смысл решения), мы можем помочь вам с гораздо более практичным решением. Нам также нужно знать, какой тип клиента это (браузер, пользовательский код и т. Д.) И каковы его возможности. – jfriend00

+0

FYI, вы не можете отправлять пакеты в приложение, которое еще не подключено к вашему серверу или оно не является сервером, к которому вы можете подключиться. Должно быть какое-то чувство связи для отправки по TCP. Существуют и другие протоколы, такие как UDP (и другие) с различными свойствами/характеристиками, но вы не дали нам никакого реального представления о реальной проблеме или ограничениях ваших двух конечных точек, чтобы мы знали, что еще можно предложить. – jfriend00

+0

Мне нужно обработать пакеты в пользовательском пространстве. По умолчанию транспортный уровень обрабатывается ОС Linux, но DPDK может обрабатывать его в пользовательском пространстве. Я хочу немного изменить протокол TCP. Назовем это Changed_TCP. Клиенты - это браузеры. Но я не знаю, с чего начать. – Alexandr

ответ

1

Если вы просто хотите перезагрузить баланс существующего соединения webSocket, то с несколькими строками кода клиента вы можете отправить клиенту сообщение «повторно подключиться», и клиент удалит текущее соединение с WebSocket, а затем снова подключится новое соединение.

Это повторное подключение позволит вашей ферме серверов перезагрузить баланс этого нового соединения.

Помните, что входящее соединение webSocket начинает работать как HTTP-запрос с заголовком «upgrade», так что вы будете искать с балансировкой нагрузки.

Если вы используете socket.io как на клиенте, так и на сервере (слой обмена сообщениями поверх webSocket), он автоматически подключается, поэтому вы даже можете просто удалить соединение на сервере, а затем socket.io будет автоматически подключаться без любой новый клиентский код.