API-шлюз для WebSocket
Мне нужен шлюз API для моего приложения веб-сокета.
- Анализировать и идентифицировать необычные запросы с определенного IP
- Квоты и ограничение скорости
- Статистика
- Бесплатная или коммерческая
- Отличная производительность
Подпротоколом моего WebSocket является WAMP, поэтому я боюсь, что для этой работы не существует какого-либо продукта.
Я намерен разработать один и предположить, что он будет работать следующим образом:
- Между моим клиентским приложением и сервером веб-сокетов установлен прокси (NGINX или HAProxy).
- Прокси дублирует запрос / ответ на другое приложение, которое я называю
monitor
monitor
Приложение анализирует поток и контролирует прокси, чтобы ограничить / заблокировать определенный ip.monitor
приложение запускается параллельно, и если оно не работает, это не влияет на мое приложение и прокси.
Такой подход звучит осуществимо. Но прокси, похоже, не поддерживает повторное использование восходящего соединения с monitor
,
Предположим, что между прокси-сервером и клиентом установлено 10К соединений, затем прокси-сервер также устанавливает 10К соединений как восходящий к monitor
приложение? это недопустимо.
Я ожидаю, что между прокси и monitor
отправить дубликаты запросов / ответов. Конечно прокси сообщает monitor
реальный источник / цель для каждого запроса / ответа.
Есть ли прокси или продукт, удовлетворяющий этому требованию, так что мне нужно только меньше развиваться?
2 ответа
(TL;DR ... извините!)
Я работаю над проектом, делающим что-то очень похожее с G-WAN. Первоначально я писал API-сервлеты, которые работали довольно хорошо, но не в полной мере использовали возможности G-WAN. С некоторыми указателями из поддержки G-WAN я начал изучать использование обработчиков; Я портировал свои сервлеты API в подпрограмму перезаписи URL в обработчике (подавляющее большинство содержимого, возвращаемого для запроса API, является статическим / предварительно обработанным содержимым). Сейчас я работаю над процедурой из 404 обработчиков, чтобы отследить случаи, когда у нас (пока) нет предварительно отрендеренного контента, превратить их в запросы рендеринга по требованию и динамически выстроить ответ.
Со стороны клиента все выглядит абсолютно динамично. Но, выполняя перезапись URL-адресов для статических путей и позволяя G-WAN отправлять наши запросы по требованию, это уменьшает объем кода, который мы должны писать, и использует некоторые высокооптимизированные функции в G-WAN. Я упоминаю эти детали в качестве примера того, что Гил называл "разрушением формы". Изначально наш подход выглядел очень похоже на то, как мы реализуем реализацию с помощью nginx (за исключением того, что не требуется такой шлюз, как fcgi). Это было значительное улучшение, хотя, как только мы сократили требования и отбросили много предположений о том, как должны создаваться веб-сервисы.
Одно слово предостережения, если вы планируете заниматься разработкой на C++. Связь между G-WAN и внешними библиотеками - это "C", а не "C++". Они сделали это по причинам производительности и памяти (хороший выбор), но я не думал об этом полностью, когда начал писать некоторые библиотечные подпрограммы на C++, на которые я собирался ссылаться из своих сервлетов и обработчиков G-WAN в дополнение к тому, чтобы ссылки из различных приложений C++. Это не демонстратор - множество библиотек C, которые прекрасно работают с приложениями C++. Но было бы неудобно ссылаться на динамическую библиотеку классов C++ (.so) через связь "C" через G-WAN из сервлета. (Моим простым решением было перенести мой "общий" код C++ в файлы.h и просто включить их в мои обработчики и сервлеты G-WAN, а также в мои приложения на C++. Не чисто, но целесообразно.)
К вашим 5 конкретным моментам, с точки зрения G-WAN:
В зависимости от вашего определения "анализировать" и "необычно" это может быть легко сделано в C/C++ в вашем обработчике протокола, или вы можете использовать внешние библиотеки. Есть несколько способов сделать это асинхронным, либо как отдельные процессы, либо, возможно, просто неблокирующий ввод / вывод, если блокировка является проблемой.
Также легко управляется из обработчика.
То же самое.
Да.:) Зависит от уровня поддержки, которую вы хотите. Бесплатно, если вы полагаетесь исключительно на SO и другую поддержку сообщества. Мы выбрали недорогую подписку на поддержку, и ответы значительно превзошли наши ожидания.
О да! Мы подтвердили это в первые несколько дней.
Да, и последнее: после того, как вы потратили час или два на написание некоторых сервлетов G-WAN, вам может быть трудно вернуться к другим механизмам веб / приложений / сервисов. С сервлетами я просто сохраняю свои изменения из редактора и нажимаю кнопку "Обновить" в окне браузера, чтобы увидеть новый результат (попробуйте это с реализацией fcgi!). У меня есть несколько экземпляров G-WAN, запущенных на моем сервере (настроенных для разных IP-адресов и номеров портов), поэтому на одном компьютере у меня есть несколько этапов разработки кода, плюс рабочий сервер. Для разработки я запускаю G-WAN в терминальном сеансе (не как демон) и могу использовать printf(...) в моих кодах сервлета и обработчика, чтобы увидеть, что происходит на сервере, а не в том, что происходит в окно моего браузера.
Для получения дополнительной информации:
- Обработчик протокола G-WAN
- Руководство пользователя G-WAN (начиная со страницы 34)
- состояния обработчика
- вызов библиотечных функций из сервлетов, обработчиков
- а также посмотрите примеры в папке handlers установочного пакета G-WAN.
Удачи!
кругозор
G-WAN protocol handler
позволит вам реализовать такой прокси для мультиплексирования запросов через одно соединение (или соединение на рабочий поток для большей масштабируемости).
Это то, что G-WAN упрощает: ломая форму, создавая индивидуальные решения.