none
双工通信问题,服务端消息分发! RRS feed

  • 问题

  • 使用双工通信,我想实现一个这样的功能:

    有3个客户端 ,1个服务端, 客户端1 发送消息给 服务端, 服务端接收到消息,将消息 同时发给 客户端2 和客户端 3.

    假设客户端数量为N个,那在服务端怎么实现将信息通知给N个客户端,能否使用OperationContext.Current的相关属性,获取客户端监听地址?

    我是想:只要客户端一连接服务端,即将客户端监听地址,放到服务端列表中,然后实现服务端消息分发机制。


    小飞鱼Гìsん
    2011年7月13日 3:03

答案

  • 要实现这种功能。

    1,保持所有的客户端必须能够回调,也就是回调通道状态可用。

    2.OperationContext.Current只能访问当前操作调用的上下文信息,

    3.如果要求某个客户端连接服务器,即通知其它的客户端,可以使用一个公共的服务端列表来维护客户端信息。每次客户端连接成功都会更新这个列表,或者退出也会更新这个列表。这个列表可以是一个全局的静态的List对象。

    其它的每个服务实力可以保持一个实例方法,来订阅某个List的更新事件,即可。只要变动立即回调所有的客户端。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年7月13日 9:20
    版主

全部回复

  • 要实现这种功能。

    1,保持所有的客户端必须能够回调,也就是回调通道状态可用。

    2.OperationContext.Current只能访问当前操作调用的上下文信息,

    3.如果要求某个客户端连接服务器,即通知其它的客户端,可以使用一个公共的服务端列表来维护客户端信息。每次客户端连接成功都会更新这个列表,或者退出也会更新这个列表。这个列表可以是一个全局的静态的List对象。

    其它的每个服务实力可以保持一个实例方法,来订阅某个List的更新事件,即可。只要变动立即回调所有的客户端。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年7月13日 9:20
    版主
  • 老徐:

      还是有点疑惑,就是服务端的List是保存客户端的信息吗?你的意思是否是服务端已知客户端的数量及地址?

     因为客户端地址对于服务端是未知的,所以服务端怎么回调过去?服务端要回调肯定要获取到当前有多少客户端,它们的监听地址分别是什么吧?

     之前看过你的一篇文章,就是服务端获取客户端在线用户数,但是其中只是保存了客户端的数量,确没有保存客户端回调地址。

     能够有细说下怎么实现?

    先谢了!

     

     


    小飞鱼Гìsん
    2011年7月14日 1:29
  • 当前客户端回调通道的实例引用不是可以获取到吗?

    这个可以再服务端临时保存起来吧。

    回调的时候在查找


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年7月18日 2:57
    版主
  • 明白了,thx 老徐!
    小飞鱼Гìsん
    2011年9月1日 8:18