通过http堆叠本机协议的选项

本文关键字:协议 选项 本机 http 通过 | 更新日期: 2023-09-27 18:25:16

我们有一个客户端/服务器系统,其中所有通信都是通过TCP上的二进制/SSL流使用本机协议完成的。我们所有的代码都是用C#.NET 2.0编写的,有些部分是用3.5编写的。我们的协议旨在支持各种消息传递模式,即请求/响应,并且由于没有更好的术语,来自客户端或服务器的单向消息是不规则的。

我们的目标是为我们的系统添加一个功能,以便通过HTTP承载我们的协议。这样做有几个原因,但我认为这里不需要解释。请告诉我是否应该。

我们的想法是使用标准的请求方法,即GET、PUT、POST,而不是DELETE,并遵循HTTP规范,将我们的协议作为应用程序/二进制嵌入到HTTP请求中。如果我们的协议只是请求/响应,那么这将是非常直接的。主要关注的问题来自单向消息,更具体地说是来自服务器的未经请求的消息。另一个重要的问题是HTTP不面向持久连接,但我相信HTTP/1.1可以克服这一点。第三个问题是服务器连接不是无状态的。

我们已经设计和原型设计了几个星期,我们提出了几个想法:

  1. 在服务器端和客户端的通信层和协议层中重构代码。尽管大部分代码都是共享的,但这是一项大量的工作,很可能胡德不会成功。这里的问题是,这甚至可以用我们设计糟糕的协议来实现吗
  2. 使用代理方法。也就是说,使用WCF创建一个HTTP服务器,打开HTTP消息,并通过持久连接将本机消息中继到我们的服务器。这将需要客户端上的抽象层,该抽象层将实际维护到代理的两个连接。一个连接执行请求/响应,另一个连接使用延迟响应技术携带未经请求的消息
  3. HTTP隧道,我们还没有研究

我们希望有人以前遇到过这种挑战,并能提供一些合理的建议?

请接受我的道歉,如果这是错误的地方张贴这个问题。

通过http堆叠本机协议的选项

对于服务器启动的消息,您可以考虑WebSockets。根据Scott Guthrie的博客,ASP.Net MVC 4测试版支持web套接字。