Symbian IPC client-server 框架
2010-04-20 16:00:00 来源:WEB开发网IPC是Inter-Process Communication的缩写,说的就是client-server框架。它可是symbian OS 上的元老之一。在Psion Series 5上就已经实现了,直到symbian OS v9.5都在不断的改进扩展新的功能。client-server在OS上随处可见,比如F32(文件服务)、ESOCK(socket服务)、大名鼎鼎的WSERV(window 服务)以及ETEL(电话服务)等等。由于我现在使用9.5版本的symbian os,所以在这里只讨论IPCv2。老一点IPCv1就不专门说了。
从使用client-server的角度来看,developer只需要关注4个接口类:CServer2、CSession2、 RSessionBase和RSubSessionBase,其中前两个类的实例运行于user端的server端,后两个类实际上是提供给client 使用的接口,运行于user端的client端。由此可见client-server框架非常便利,它的工作过程可以大体描述为:
1. client使用全局唯一的server名字与server建立起连接,创建一个session。
2. 如果server没有启动,就启动之。
3. server一启动就是发出一个request检查kernel端消息队列是不是有待处理的消息。
4. client发送消息给server。实际上将消息放入到kernel端的消息队列中。
5. client等待消息的处理结果。
6. 一旦有消息,server就取出一个消息
7. server处理消息
8. server处理完消息后,通知client消息已经处理完。
注意,消息队列FIFO队列,并且server一次只能取出一个消息,不能并行处理。
IPCv2相对于IPCv1来说提供了更健全的安全机制和更便利的使用方式。Server的名字必须是以“!”开头的,kernel端将保证名字的合法性和唯一性;session不再绑定到特定client中的线程;在kernel端创建server以及client连接到这个server是异步进行的,这将保证client不会连接到恶意的server;server通过送来的message中包含的handle访问client端的地址空间,而 message包含的handle是经过server认证的;session可以在线程之间也可以在进程之间共享。
在上文中我们提高了4个类,还提到了User端、kernel端等,看着有些乱。下面我用一个图来表示这些概念,将它们一一对应起来。
这样是不是比较清楚些?从上图可以看出来只要实现了CServer2和CSession2这两个类就实现了server。一般我们接触到的server都是一个exe,也就是说一般情况下server都是运行在独立的进程空间的。但是实际上只要支持AO机制的线程或者进程都可以用于实现server,这是由于CServer2派生于CActive。Server必须在client与之交互之前启动,有两种方式启动server:
赞助商链接