我的 websocket 应用程序需要一个 API 网关。
- 分析并识别来自某些IP的异常请求
- 配额和速率限制
- 统计数据
- 免费或商业
- 性能稳定
我的WebSocket的子协议是WAMP,所以恐怕没有现有的产品可以完成这项工作。
我打算开发一个并假设它会以这种方式工作:
- 我的客户端应用程序和 websocket 服务器之间安装了一个代理(NGINX 或 HAProxy)
- 代理将请求/响应复制到另一个应用程序,我称之为
monitor
- The
monitor
应用程序分析流量并控制代理来限制/阻止某些IP。
- The
monitor
应用程序并行运行,如果它关闭,它不会影响我的应用程序和代理。
这个办法听起来可行。但代理似乎不支持重用上游连接monitor
.
假设从 proxy 到客户端建立了 10K 个连接,那么 proxy 也建立了 10K 个连接作为上游到monitor
应用程序?这是不可接受的。
我希望代理和代理之间只建立一个或多个连接monitor
发送重复的请求/响应。当然代理通知monitor
每个请求/响应的真实源/目标。
有没有什么代理或产品可以满足这个要求,这样我就只需要开发更少的东西?
(长话短说……抱歉!)
我正在开展一个与 G-WAN 非常相似的项目。最初,我编写了 API servlet,它运行得很好,但没有充分利用 G-WAN 功能。在 G-WAN 支持的一些指导下,我开始探索处理程序的使用;我将 API servlet 移植到处理程序中的 URL 重写例程(API 查询返回的绝大多数内容是静态/预渲染内容)。我现在正在开发一个 404 处理程序例程来捕获我们尚未预渲染内容的情况,将它们转换为按需渲染请求并动态构建响应。
从客户端来看,这一切看起来都是动态的。但是,通过对静态路径进行 URL 重写并允许 G-WAN 调度我们的按需案例,它减少了我们必须编写的代码量,并利用了 G-WAN 中的一些高度优化的功能。我提到这些细节是作为吉尔所说的“打破模式”的一个例子。最初,我们的方法看起来很像我们如何使用 nginx 进行实现(除了不需要像 fcgi 这样的网关)。尽管一旦我们精简到要求并扔掉了很多假设关于如何构建 Web 服务。
如果您计划使用 C++ 进行开发,请注意一点。从 G-WAN 到外部库的链接是“C”而不是“C++”。他们这样做是出于性能和内存占用的原因(不错的选择),但当我开始用 C++ 编写一些库例程时,我并没有完全考虑到这一点,我打算从我的 G-WAN servlet 和处理程序中引用这些例程,除了从各种 C++ 应用程序中引用。它不是一个令人惊叹的东西——有大量的“C”库可以很好地与 C++ 应用程序配合使用。但从 servlet 通过 G-WAN 的“C”链接引用动态 C++ 类库 (.so) 会很麻烦。 (我的简单解决方法是将我的“共享”C++ 代码移至 .h 文件中,然后将它们包含到我的 G-WAN 处理程序和 servlet 以及我的 C++ 应用程序中。虽然不干净,但很方便。)
从 G-WAN 的角度来看,您有 5 个具体观点:
根据您对“分析”和“异常”的定义,这可以在协议处理程序中使用 C/C++ 轻松完成,或者您可以使用外部库。有多种方法可以实现异步,可以作为单独的进程,也可以只是非阻塞 I/O(如果阻塞是一个问题)。
也可以通过处理程序轻松管理。
Ditto.
是的。 :) 取决于您想要的支持级别。如果您完全依赖 SO 和其他社区支持,则免费。我们选择了廉价的支持订阅,并且得到的回应远远超出了我们的预期。
哦耶!我们在最初几天就确认了这一点。
哦,还有最后一件事:一旦您花了一两个小时编写一些 G-WAN servlet,您可能很难再回到其他 Web/应用程序/服务机制。使用 servlet,我只需保存编辑器中的更改,然后在浏览器窗口中单击刷新即可查看新结果(尝试使用 fcgi 实现!)。我的服务器上运行着多个 G-WAN 实例(配置为不同的 IP 地址和端口号),因此在一台计算机上,我拥有多个阶段的开发代码库以及一台生产服务器。对于开发,我在终端会话中运行 G-WAN(而不是作为守护进程),并且可以在 servlet 和处理程序代码中使用 printf(...) 来查看后端发生的情况以及后端发生的情况我的浏览器窗口。
欲了解更多信息:
- G-WAN 协议处理程序 http://gwan.com/developers#tab3
-
G-WAN 用户手册 http://gwan.com/archives/gwan_linux.pdf(从第34页左右开始)
- 处理程序状态 http://gwan.com/api#handlers
- 从 servlet、处理程序调用库函数 http://gwan.com/faq#call_libraries
- 并查看 G-WAN 安装包的 handlers 文件夹中的示例。
祝你好运!
Ken
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)