扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:论坛整理 2007年11月17日
关键字: 定向广播
如果想利用该技术作一个简单而又典型的应用,
服务端:
以下是引用片段: Code class Program { static void Main(string[] args) { BinaryServerFormatterSinkProvider sfsp = new BinaryServerFormatterSinkProvider(); sfsp.TypeFilterLevel = TypeFilterLevel.Full; Hashtable props = new Hashtable(); props["port"] = 8086; TcpChannel channel = new TcpChannel(props, null, sfsp); ChannelServices.RegisterChannel(channel, false); SayHello sayHello = new SayHello(); RemotingServices.Marshal(sayHello, "SayHello"); Console.ReadKey(); sayHello.Say("Mike", "Hello, Mike"); Console.ReadKey(); sayHello.Say("John", "Hello, John"); Console.ReadKey(); } } |
客户端:
以下是引用片段: Code class Program { static void Main(string[] args) { BinaryServerFormatterSinkProvider sfsp = new BinaryServerFormatterSinkProvider(); sfsp.TypeFilterLevel = TypeFilterLevel.Full; Hashtable props = new Hashtable(); props["port"] = 0; TcpChannel channel = new TcpChannel(props, null, sfsp); ChannelServices.RegisterChannel(channel, false); SayHello sh = (SayHello)Activator.GetObject(typeof(SayHello), "tcp://localhost:8086/SayHello"); SayEventReappear re = new SayEventReappear(); re.ClientId = "John"; sh.OnSay += new SayHandler(re.Say); re.OnSay += new SayHandler(re_OnSay); Console.ReadKey(); } static void re_OnSay(string text) { Console.WriteLine(text); } } |
以下是引用片段: Code public class SayHello : MarshalByRefObject { public event SayHandler OnSay; public void Say(string clientId, string text) { if (this.OnSay != null) this.OnSay(text); } } public delegate void SayHandler(string text); public class SayEventReappear : MarshalByRefObject { public event SayHandler OnSay; public void Say(string text) { if (this.OnSay != null) this.OnSay(text); } } |
OK,我的信息广播
但是,我很快就发现了问题:如果我的确想让所有订阅我的广播事件的客户端都得到我要广播的信息,这个实现应该不会有问题。但是现在我有一个消息只想通知 Mike 或 John (正如以上代码),(注:可能这时不能再称为“广播”了),我的广播程序依然将这个消息通知到了每一个客户端。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者