请求处理时的永久TCP连接或连接建立

时间:2011-10-21 01:53:44

标签: c# network-programming

我正在开发一个TCP服务器,如果指定的任务完成,它将与客户端通信。所以我在服务器上打开一个套接字,客户端连接它 该连接也可用于将数据传输回客户端。那很好。
但是连接中止和类似的东西呢?

我的想法是每次连接到服务器,当客户端必须与之通信时。但是如何将数据发送回客户端呢? 我也可以在客户端打开一个套接字吗?

编辑:
我也考虑过WCF。我认为这可能是实现服务器客户端层次结构的一种非常好的方法 你觉得怎么样?

2 个答案:

答案 0 :(得分:0)

这取决于您的其他要求。如果我们正在谈论一条不急于每天发送一次的消息,那么正确的解决方案可能是客户端定期连接到服务器并检查是否有任何消息。如果我们正在谈论更常见且更匆忙的事情,那么正确的解决方案可能是客户端始终保持与服务器的连接。在某些情况下,正确的解决方案可能是服务器与客户端建立“向后”连接(如果可能) - 如果“向后”连接,可能选择退回到从客户端到服务器的持久连接是不可能的。

请参阅Push technology上的这篇文章,特别是关于long polling的部分。

答案 1 :(得分:0)

从服务器连接到客户端的运行时POV需要支持此服务器的网络环境(防火墙/ IDS等)。

如果您无法确定情况总是如此,则此选项将被排除在IMO之外。

对于保持连接打开的客户端:

我认为这是一个不错的选择...您需要确保客户端实现检测到任何连接问题并自动重新连接...

无论您实施什么解决方案,您都可能需要为每个客户端实现一个事件队列......根据您的重新排列,这些队列甚至可能需要持久...

WCF可以以我描述的所有方式工作,并提供一些功能(如序列化,可选会话管理,传输安全性等),这有助于构建一个强大且可维护良好的系统......尽管基于纯TCP / IP解决方案可能在性能方面更好......