之前已经从基本原理上实现了Remoting的双向通信。准备将其移植到我的项目中,不过为了成功移植,我还是需要再把以前的版本稍作修改才能放心的去做。项目中当一台机子中有工作人员进行了预警信息标记时(在地图上会有一个标志),其他机子需要同步更新。这就是说任何一个客户端进行标记时需要通知服务器,然后让服务器去广播标记。这一个小动作就需要双向通信一次。按照项目需求,我再次修改版本,这次只需要改一个函数:
修改服务器订阅事件函数如下:
void marshal_obj_SubscribeAtServer(string msg)
{
//跨线程调用
textBox2.Invoke(new Action<string>(str => { textBox2.AppendText(str); }), msg);
//订阅函数不在主线程,需另起线程触发广播方法
Thread th = new Thread(new ThreadStart(() => {
marshal_obj.TriggerAtServer("服务器--" + this.ServerIP() + System.Environment.NewLine + "我是服务器,我发现一个客户端有标记行为,我要让你们全部都标记!" + System.Environment.NewLine);
}));
th.Start();
}