2008年6月9日星期一

关于将仿真底层与显示分离的想法

由于师弟的代码使用C#写的,我要将我的仿真系统(Java写的)的数据传送到他的程序,就是一个进程间通讯(IPC)的问题,当然,这里只是单向的通讯,控制中心无需向仿真系统发送数据。
上网搜了一下如何实现IPC,发现网络方式是最不依赖于底层操作系统的,因为Java和C#都能很好的支持网络操作。进一步的考察选择TCP还是UDP方式,感觉UDP的组播方式最适合我的需求。因为仿真系统本身就有底层MAS与显示系统之间接口的问题,通过UDP组播方式,将底层MAS单独实现为一个系统,通过一个接口Agent向固定的组播IP发送数据,显示系统和控制中心这样的数据接收者则加入上述组播组,接收组播消息。
由于底层系统是不依赖于显示和其他系统模块的,这样就可以在实现底层系统时不用关心其他模块的实现,做到最大程度的解耦~显示和其他模块也不用关心底层系统的实现,只需接收组播消息即可,然后进行解析,完成自身功能。这样可以分别实现2D和3D显示模块,且这两个模块可以共享组播数据解析模块的代码~
另一个显而易见的好处是,可以在不同的计算机上运行不同的模块,充分利用计算机网络中多台计算机的处理能力,使得以后扩展更容易。比如,路网规模扩大后,可以在多台计算机上运行不同区域的底层仿真系统,向不同的组播地址发送消息,显示模块可以通过选择加入不同的组播组还切换接收不同区域的仿真结果来显示,或者用多台计算机同时显示不同区域的仿真结果。
以上的网络操作都是在本地局域网内实现的,因此网络速度不是问题,UDP的效率优势得到充分发挥的同时,其劣势也可以忽略,这是我目前能想到的最佳方案了~

没有评论: