Equalizer中eq::Server/eq::Node的代码分析

        在Equalizer中,server作为一个独立运行的进程,负责整个并行绘制系统的管理与调度,其主要任务包括加载配置脚本,监听并与各节点建立连接,响应来自其它节点的消息等。由于eq::Server是eq::Node的子类,因此在很多方面与后者比较相似。
 
1.加载配置脚本
        在eq::Server的初始化阶段,eq::Server::Loader及其多个重载函数可以从命令行中的字符串或脚本文件(*.cfg)中加载关于应用的配置,并据此创建eq::Server以及eq::Config对象。无论是采用那种配置方式,都以字符串形式加载并由server/parser.cpp中的函数实现解析,该过程是采用Bison-Flex自动生成的。事实上,这里的eq::Config就是要在收到其它应用节点的连接请求后,需要向其发送的配置参数。
 
2.网络通讯
        eq::Server继承自eq::net::Node,初始化过程直接采用父类的操作,其中的关键在于启动监听功能。缺省的监听采用TCP/IP协议对指定端口进行监听,也可以在命令行参数中输入由“--eq-listener”参数指定的网络协议与监听端口,可用的协议包括TCP/IPSDPPIPE三种。
        eq::net::Node的初始化时,可以在命令行参数中输入“--eq-client”,并在其后的参数中标明要运行的客户端指令,从而创建作为客户端的节点对象,也就是所谓的“alone”运行模式。

        eq::net::Node中的数据发送、接收,都是由其中的成员对象_connect完成。该对象为eq::net::Connection的对象指针,在win32下实例化为socketConnectionWin32对象,它采用WinSockoverlapped模型进行数据的发送接收。其实质是以多线程形式的阻塞模式,实现数据的异步传输。同时,Connection类也提供了直接面对数据缓存与Packet结构体的传输接口,从而简化了其在eq::net::Node中的应用。

    在eq::net::Connection中,send/recv是高级接口,由应用对象,如eq::net::Node调用,而read/write是底层接口,用于直接处理数据传输的socket操作。高层接口内部通过底层接口执行网络操作,其接口与底层操作无关,因此由eq::net::Connection类直接实现。而底层的read/write所使用的接口与运行的平台相关,例如在windows中使用WinSock,在有的环境下会采取共享缓存方式,所以由不同的子类实现,如下图。

 

 

3.消息响应

        eq::net::Node在初始化监听后会启动两个线程,分别用于接收监听到的数据以及处理数据中的指令,所有的数据都以消息的形式进程处理。其中_receiverThread用于将接收到的消息放入node的消息队列,而_commandThread则从消息队列中依次获取消息并根据消息执行操作。eq::Server在完成初始化后,会进入消息处理循环,不断从消息队列中获得新的消息并进行处理。

        eq::net::Node中利用eq::net::ConnectionSet实现异步的网络通讯,并根据所接收到的消息进行简单响应。需要注意的是,这里通过异步接收到的消息并不是有效的应用消息。除了必要的异常消息外,Event_Data是其中最主要的消息,该消息中还包括收到该消息的connector,以及相应的数据大小。在_receiveThread线程中就是首先查询eq::net::ConnectionSet,当出现Event_Data消息后,即根据该消息的参数进行同步的数据接收真正有效的消息数据。(这种方式下,首先通过简单的异步消息避免了接收线程中不断的主动查询端口,然后只有在明确有有效数据到达时才读取端口,效率相对较高

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值