API WebSocket 网关

API gateway for WebSocket

我的 websocket 应用程序需要 API 网关。

  1. 分析并识别来自特定 IP 的异常请求
  2. 配额和速率限制
  3. 统计
  4. 免费或商业
  5. 稳定的表现

我的 WebSocket 的子协议是 WAMP,所以恐怕没有现有的产品可以完成这项工作。

我打算开发一个并假设它会以这种方式工作:

这个方法听起来可行。但是代理似乎不支持重用到 monitor.

的上游连接

假设从代理到客户端建立了 10K 连接,那么代理也建立了 10K 连接作为 monitor 应用程序的上游?这是不可接受的。

我希望在代理和 monitor 之间只建立一个或多个连接来发送副本 requests/responses。当然,代理会为每个请求/响应通知 monitor 真实的 source/target。

有没有代理或产品满足这个要求,让我只需要少开发?

G-WAN protocol handler 将允许您通过一个连接(或每个工作线程一个连接以获得更大的可扩展性)实现这样一个代理以 多路复用 请求。

这就是 G-WAN 使之变得简单的原因:打破常规以创建定制解决方案。

(长话短说……抱歉!)
我正在做一个与 G-WAN 非常相似的项目。最初,我编写了 API servlet,它运行良好,但没有充分利用 G-WAN 功能。在 G-WAN 支持的一些指导下,我开始探索处理程序的使用;我将 API servlet 移植到处理程序中的 URL-rewrite 例程(为 API 查询返回的绝大多数内容是静态/预呈现内容)。我现在正在研究 404 处理程序例程,以捕捉我们(还)没有预呈现内容的情况,将它们转换为按需呈现请求并动态构建响应。

从客户端看,这一切看起来完全是动态的。但是通过对静态路径进行 URL-rewrites 并允许 G-WAN 分派我们的按需案例,它减少了我们必须编写的代码量,并且利用了 G-WAN 中的一些高度优化的功能.我提到这些细节是作为 Gil 所称的示例 "breaking the mould." 最初我们的方法看起来很像我们将如何使用 nginx 进行实现(除了不需要像 fcgi 这样的网关)。这是一个相当大的改进,尽管一旦我们精简到 要求 并丢弃许多关于应该如何构建 Web 服务的 假设

请注意,如果您计划使用 C++ 进行开发。从 G-WAN 到外部库的链接是 "C" 而不是 "C++"。他们这样做是出于性能和内存占用的原因(不错的选择),但是当我开始用 C++ 编写一些库例程时,我并没有完全考虑到这些例程,我打算从我的 G-WAN servlet 和处理程序中引用它们从各种 C++ 应用程序中引用。它不是一个亮点 - 有很多 "C" 库可以很好地与 C++ 应用程序一起工作。但是,通过来自 servlet 的 G-WAN 的 "C" 链接来引用动态 C++ class 库 (.so) 会很麻烦。 (我的简单修复是将我的 "shared" C++ 代码移动到 .h 文件中,并将它们包含到我的 G-WAN 处理程序和 servlet 以及我的 C++ 应用程序中。不干净,但权宜之计。)

对于您从 G-WAN 角度来看的 5 个具体点:

  1. 根据您对 "analyse" 和 "unusual" 的定义,这可以在协议处理程序中的 C/C++ 中轻松完成,或者您可以使用外部库。有多种方法可以实现异步,或者作为单独的进程,或者可能只是非阻塞的 I/O,如果阻塞是一个问题。

  2. 也可以通过处理程序轻松管理。

  3. 同上。

  4. 是的。 :) 取决于您想要的支持级别。如果您完全依赖 SO 和其他社区支持,则免费。我们选择了价格低廉的支持订阅,而且反应远远超出了我们的预期。

  5. 哦耶!我们在前几天确认了这一点。

哦,还有最后一件事:一旦您花了一两个小时编写了一些 G-WAN servlet,您可能很难再回到其他 web/app/service 机制。对于 servlet,我只需保存编辑器中的更改并在浏览器上点击刷新 window 即可查看新结果(尝试使用 fcgi 实现!)。我的服务器上有多个 G-WAN 运行ning 实例(配置了不同的 IP 地址和端口号),所以在一台机器上,我有多个阶段的开发代码库,外加一个生产服务器。对于开发,我 运行 G-WAN 在终端会话中(不是作为守护进程),并且可以在我的 servlet 和处理程序代码中使用 printf(...) 来查看后端发生了什么vs 在我的浏览器中发生了什么 window.

更多信息:

祝你好运!