如何根据 Web 套接字将 http Web 请求中继到本地 api



我必须实现一个参数来整理下图所表示的问题:

云到本地 API

基本上,我必须在云 (Azure( 中部署公共 API,但数据位于本地计算机中。本地计算机公开提供数据的 Swagger API。每台本地计算机都有一个唯一标识符(安装标识符(,允许我们路由请求。

我按照以下链接中建议的方法基于 Azure 服务总线的中继模块开发了一个解决方案:

对本地 API 的安全互联网访问

基于 Azure 服务总线中继模块的解决方案解决了我的问题并满足了我的大部分需求,但它有一个问题,延迟很糟糕。

我已经在同一地理区域部署了公共 API 和服务总线端点,一个简单的请求 GET/companies 平均需要 1.5 秒,本地 API 中的处理时间非常低,只有几毫秒。

为了保持低延迟,我一直在考虑使用 Web 套接字,但我不知道是否是记住这种情况的最佳方法,因为对于对公共 API 的每个请求,我都必须打开一个 Web 套接字通道到 ApiController 内的本地 API 并照顾它的生命周期(在返回响应之前关闭它(。

显然,在这种情况下,本地 API 中的每个 ApiController 都应该同时提供对 Web 套接字和 http 的支持。

另一种解决方案是实现一个 http 代理,将原始请求从公共 API 中继到本地 API,但从我的角度来看,使用中间没有连接管理器的通信 P2P 可以实现最佳延迟,因此我现在的重点是 Web 套接字。

我想尽可能地满足标准,因此我想使用"纯"网络套接字,这意味着不使用 Signalr。

一旦,我暴露了我的问题,解决方案和替代方案,我的问题如下:

  1. 如何在 ApiController 类的操作方法中打开 Web 套接字,并将原始 http 请求从公共 API 中继到本地 API?

  2. 如何在内部部署 API 中为两种协议 HTTP 和 WebSocket 提供支持。本地 API 应该能够处理 HTTP 请求,还可以处理 WebSocket 请求。

  3. 我的第一个赌注是使用System.Net.WebSockets,但我想知道是否存在任何websockets库,当与Web API集成时 ASP.NET 闪耀。

一个简单的请求 GET/companies 平均需要 1.5 秒,内部部署 API 中的处理时间非常低,只有几毫秒

你正在使用 Azure 中继服务将服务安全地公开到公有云,据我所知,由于许多影响因素(例如,客户端必须首先向服务总线中继进行身份验证(,我们无法实现与本地服务器相同的延迟。

此外,本文通过示例解释了如何创建自定义HTTP处理程序以接受客户端WebSocket请求,您可以参考它来修改API应用程序以处理WebSocket请求。

相关内容

  • 没有找到相关文章

最新更新