- 论坛徽章:
- 0
|
本帖最后由 duanjigang 于 2011-01-06 09:50 编辑
呵呵,感冒耽搁了几天,今天把使用ICE中间件的这种方式补充上来:wink:
第三种方式,结合ICE中间件进行设计。
ICE提供了一个多系统,多语言互通的中间件,通过使用slice语言定义一个.ice文件来实现不同程序的通讯数据结构和调用方法的定义。
然后调用slice2XX(xx=cpp,java,php..)来生成对语言的代码。对于开发人员来说,只需要把生成的java或者cpp代码包含到自己的工程中来,客户端填写数据到对象中,调用定义的函数就行,服务端继承接口中定义的虚函数,实现数据处理即可。调用也十分简单,从感性上理解,客户端调用数据处理方法,服务端的方法就被调用了,它是一个类似于RPC的机制。
有了ICE这个强有力的助手,数据发送和接收变得异常容易了,然后我们需要处理的就是连接的维护。
服务器端不需要维护连接,因为对他来说,服务端就是一个类似回调函数的机制,它并不关心或者不清楚在某一个时刻,自己会被哪个远程主机调用。客户端需要维护连接,因此,类似于模型2中的方法,在客户端独立一个线程,一直尝试连接未连接上的主机即可。
讲讲这种模型下我的一般设计方法:
主线程启动后创建两个线程,一个客户端线程,一个服务端线程,服务端线程运行后,就会处于阻塞状态,一直等待消息的到来,客户端在运行后则会一直尝试去发送数据,而主线程下来要做的事情就是:遍历它跟客户端线程共享的那个主机列表,尝试连接每一个没有连接上的主机。
这就是第三种模型,希望有改进意见的朋友积极发表看法和意见,谢谢! |
|