ROS源码学习 五、连接处理

本文深入解析ROS中的ConnectionServer,探讨抽象工厂模式在创建处理单元中的应用,解析ConnectionServer的继承层次,并重点分析关键源码,揭示其在系统运行中的角色和执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2021SC@SDUSC

目录

一、写在前面

二、设计模式-抽象工厂

三、ConnectionServer继承层次

四、ConnectionServer及其祖父类关键源码


一、写在前面

        在上一篇博客中我们了解了在ServerSocket监听到客户端socket连接后将socket句柄送至何处,即建立了一个作业,在这个作业中由Connection负责接收与解析报文,ConnectionServer负责执行过程调用.我们已经了解了Connection接收与解析报文的过程,接下来我们将对Connection的run方法与ConnectionServer进行学习.

二、设计模式-抽象工厂

        工厂模式是为了应对要求一类产品中的多种产品而产生的,对产品对象的创建细节进行了隐藏,提高了扩展性,其大体业务流程为:获取创建工厂对象->配置工厂参数->调用工厂相关方法生产对象.而抽象工厂则是用于解决需要一个产品族中的多类产品问题,在抽象工厂模式中,存在一个创造工厂的超级工厂,用于生产具有不同配置的工厂.

        

        在ConnectionServer中存在一个生产处理单元的WorkerFactory,这个对象的产生即遵循了抽象工厂模式,在认识了这一点后我们在看到这个工厂的多级继承层次与worker对象产生的复杂过程时就明白了其必要性:WorkerFactory并非只为RPC服务,因此要尽可能地进行解耦.

三、ConnectionServer继承层次

        下面简要地对每一层级的功能进行介绍.XmlRpcController为抽象类,声明了获取工厂的方法与获取工厂配置的方法. XmlRpcServer实现了XmlRpcController,而且实现了获取注册方法调用句柄的方法、获取输出流的方法、调用句柄的方法、返回响应对象的方法.XmlHttpServer增加了设置响应头的方法,ConnectionServer重写了设置相应头与返回响应对象的方法.

四、ConnectionServer及其祖父类关键源码

        在本次分析源码的过程中,要想明白其继承关系及系统运行中扮演的角色,不妨从上篇博客中Connection的run方法讲起,因为在run方法中所调用XmlRpcServer的execute方法是Connection与ConnectionServer产生交集的唯一桥梁.

 public void run()
    {
        try
        {
            for (int i = 0; ; i++)
            {
                RequestData data = getRequestConfig();  
                if (data == null)
                {
                    break;
                }
                server.execute(data, this);  
                output.flush();
                if (!data.isKeepAlive() || !data.isSuccess()) 
                {
                    break;
                }
            }
        } catch (RequestException e)
        {
            webServer.lo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值