基于网络套接字

基于网络套接字

问题描述:

我要实现对整理出如下图所代表的问题的arquitecture如何中继HTTP web请求对前提API:基于网络套接字

Cloud to On-Premise API

基本上,我有部署云中的公共API(Azure),但数据位于内部部署的机器上。内部部署机器公开提供数据的Swagger API。每台内部机器都有一个唯一的标识符(安装标识符),可以让我们路由请求。

我已经开发了基于Azure的服务总线的继电器模块上的方法如下解决方案在以下链接提示:

Secure Internet Access to an On-Premise API

该解决方案基于Azure的服务总线的继电器模块理清我的问题,并符合我的大多数需求,但它有一个问题,延迟是可怕的。

我已经在相同的地理区域部署了公共API和服务总线端点,并且一个简单的请求GET /公司平均需要1.5秒,本地API中的处理时间非常短,仅为几个毫秒..

为了保持低延迟,我一直在考虑使用网络套接字,但我不知道是否最好的方法铭记该场景,因为对于公共API的每个请求,我会必须打开一个web套接字通道到ApiController内部的API,并关心它的生命周期(在返回响应之前关闭它)。

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

另一种解决方案,它将实现一个http代理,将公共API的原始请求转发到内部部署API,但从我的角度来看,尽可能使用没有连接性的通信P2P实现最佳延迟中间的经理,因此我现在的重点是在网络套接字上。

我想尽可能符合标准,因此我想使用“纯”网络套接字,这意味着不使用Signalr。

有一次,我已经暴露了我的问题,解决办法和方案,我的问题如下:

  1. 我怎样才能打开一个网页插座ApiController类的动作方法中并转达原从公共API到内部部署API的http请求?

  2. 如何在协议HTTP和WebSockets的本地API中提供支持。预置API应该能够处理HTTP请求,但也可以处理WebSocket请求。

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

简单的请求GET /公司需要1。平均5秒,内部API的处理时间非常短,仅为几毫秒

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

此外,this article用示例说明了如何创建自定义HTTP处理程序来接受客户端WebSocket请求,您可以引用它来修改您的API应用程序来处理WebSocket请求。