通过http堆栈本机协议的选项?

时间:2012-02-21 21:32:34

标签: c# http sockets

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

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

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

我们已经设计并制作了几周的原型,我们提出了几个想法:

  1. 重构服务器端和客户端的通信和协议层中的代码。尽管大部分代码都是共享的,但是很多工作在所有可能的情况下都不会成功。这里的问题是,这甚至可以用我们设计糟糕的协议来完成吗?
  2. 使用代理方法。这是使用WCF创建一个HTTP服务器并解开HTTP消息并通过持久连接将本机消息中继到我们的服务器。这将需要客户端上的一层抽象,它实际上将维护与代理的两个连接。一个连接用于执行请求/响应,另一个用于使用延迟响应技术来携带未经请求的消息。
  3. 我们还没有研究过的HTTP隧道。
  4. 我们希望有人之前遇到过这个挑战并且可以提供一些合理的建议吗?

    如果发布此问题,请接受我的道歉。

1 个答案:

答案 0 :(得分:1)

对于服务器启动的消息,您可以考虑WebSockets。根据{{​​3}},ASP.Net MVC 4 beta中支持Web套接字。