c# – 使用WCF的聊天室功能,双工回调与轮询?
我正在使用WCF,我在我的C#程序中放了一个聊天室设施.所以我需要能够从服务器向客户端发送两个事件的信息 –
>当用户连接/断开连接时,我更新已连接用户的列表并将其发送回所有客户端以在TextBlock中显示 所以我正在寻找有关实施此方法的最佳方法的建议.我打算使用netTcpBinding对客户端进行双工回调,但后来遇到一些问题,如果连接关闭则无法回调客户端.我需要使用percall实例来提高可扩展性.我被告知这个帖子我不应该打开连接,因为它会“显着限制scalibity” – WCF duplex callbacks,how do I send a message to all clients? 但是,我查看了编程WCF服务一书,作者似乎说这不是问题,因为’在两次调用之间,客户端持有对代理的引用,该代理在结尾处没有实际对象.线.这意味着您可以在客户端关闭代理之前很久就处理服务实例占用的昂贵资源 >那么哪个是正确的,保持代理在客户端打开是否可以? 解决方法
因为我告诉你服务器回调不会扩展,我应该解释一下.首先让我谈谈你的问题:
>如果不拥有相关书籍,我只能假设作者要么只是引用基于http的传输,要么只是请求 – 响应,没有回调.回调需要两件事之一 – 服务器需要维护与客户端的开放TCP连接(意味着服务器上有每个客户端使用的资源),或者服务器需要能够打开连接到监听客户端上的端口.由于您使用的是netTcpBinding,因此您的情况将是前者. wsDualHttpBinding是后者的一个例子,但是它引入了许多路由和防火墙问题,使得它在互联网上无法工作(我假设公共互联网是你的目标环境 – 如果没有,请告诉我们). >使用回调代理(我知道,我告诉过你不要)…客户端连接创建新代理,这些代理存储在一个线程安全的集合中,偶尔检查生存(如果发现已经死了则清除). 这是架构的草图: 此体系结构应允许您通过简单地添加更多服务器来自动扩展,并在它们之间负载平衡新连接.消息排队基础设施将是唯一的限制因素,我提到的所有内容都将超出您所见过的任何可能的用例.因为您将使用主题而不是队列,所以每条消息都将被广播到每个服务器 – 您可能需要找出一种更好的方式来分发消息,例如使用基于散列的分区. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |