2012-02-21 62 views
1

我们有一个客户端/服务器系统,所有通信都是通过TCP上的二进制/ SSL流使用本地协议完成的。我们所有的代码都是用C#.NET 2.0编写的,部分代码是用3.5编写的。我们的协议旨在支持各种消息传递模式,即请求/响应,并且由于缺乏更好的术语,客户端或服务器会定期发送单向消息。通过http堆栈原生协议的选项?

我们的目标是将功能添加到我们的系统来进行我们对HTTP协议。这样做有几个原因,但我不需要在这里解释。请告诉我,如果我应该。

思想是使用标准的请求方法,即嵌入我们的协议为application /二进制中的HTTP请求。,GET,PUT,POST,但不能删除,和HTTP规范以下。如果我们的协议只是请求/响应,这将是相当直接的做法。主要关注来自单向消息,更确切地说是来自服务器的未经请求的消息。另一个重要的问题是HTTP不是针对持久连接的,但我相信在HTTP/1.1中这是可以克服的。第三个问题是服务器连接不是无状态的。

我们一直在设计和原型这几个星期,我们已经想出了一对夫妇的想法:

  1. 重构在服务器和客户端双方的沟通和协议层的代码。尽管大部分代码都是共享的,但在所有可能的情况下都是不成功的。这里的问题是甚至可以用我们设计不佳的协议来完成?
  2. 使用代理方法。这就是创建一个使用WCF的HTTP服务器,并解开HTTP消息,并通过持久连接将本地消息中继到我们的服务器和从我们的服务器中继。这需要在客户端实现一层抽象层,以实际维护与代理的两个连接。一个连接执行请求/响应,另一个连接使用延迟响应技术来传送未经请求的消息。
  3. HTTP隧道,我们还没有研究。

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

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

回答

1

对于服务器启动的消息,你可能会考虑WebSockets。根据Scott Guthrie's blog,在ASP.Net MVC 4测试版中支持Web套接字。

+0

伟大的建议,但我们的系统在安全网络中运行,大多数Web代理服务器还不支持WebSockets的。 – Jack 2012-02-23 14:48:01