精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

XMLRPC服務器如何啟動

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月居 ? 2023-09-14 17:56 ? 次閱讀

roscore調用了roslaunch.main,我們繼續追蹤,進到ros_comm-noetic-develtoolsroslaunchsrcroslaunch文件夾中,發現有個__init__.py文件,說明這個文件夾是一個python包,打開__init__.py文件找到def main(argv=sys.argv),這就是roscore調用的函數roslaunch.main的實現,如下(這里只保留主要的代碼,不太重要的刪掉了)。

def main(argv=sys.argv):
    options = None
    logger = None
    try:
        from . import rlutil
        parser = _get_optparse()
        
        (options, args) = parser.parse_args(argv[1:])
        args = rlutil.resolve_launch_arguments(args)
        write_pid_file(options.pid_fn, options.core, options.port)
        uuid = rlutil.get_or_generate_uuid(options.run_id, options.wait_for_master)
        configure_logging(uuid)
        # #3088: don't check disk usage on remote machines
        if not options.child_name and not options.skip_log_check:
            rlutil.check_log_disk_usage()


        logger = logging.getLogger('roslaunch')
        logger.info("roslaunch starting with args %s"%str(argv))
        logger.info("roslaunch env is %s"%os.environ)
            
        if options.child_name:
           # 這里沒執行到,就不列出來了
        else:
            logger.info('starting in server mode')
            # #1491 change terminal name
            if not options.disable_title:
                rlutil.change_terminal_name(args, options.core)
            # Read roslaunch string from stdin when - is passed as launch filename.
            roslaunch_strs = []
            # This is a roslaunch parent, spin up parent server and launch processes.
            # args are the roslaunch files to load
            from . import parent as roslaunch_parent
            # force a port binding spec if we are running a core
            if options.core:
                options.port = options.port or DEFAULT_MASTER_PORT
            p = roslaunch_parent.ROSLaunchParent(uuid, args, roslaunch_strs=roslaunch_strs, is_core=options.core, port=options.port, local_only=options.local_only, verbose=options.verbose,  force_screen=options.force_screen, force_log=options.force_log, num_workers=options.num_workers, timeout=options.timeout, master_logger_level=options.master_logger_level, show_summary=not options.no_summary, force_required=options.force_required, sigint_timeout=options.sigint_timeout, sigterm_timeout=options.sigterm_timeout)
            p.start()
            p.spin()

roslaunch.main開啟了日志,日志記錄的信息可以幫我們了解main函數執行的順序。

我們去Ubuntu的.ros/log/路徑下,打開roslaunch-ubuntu-52246.log日志文件,內容如下。

圖片

通過閱讀日志我們發現,main函數首先檢查日志文件夾磁盤占用情況,如果有剩余空間就繼續往下運行。

然后把運行roscore的終端的標題給改了。

再調用ROSLaunchParent類中的函數,這大概就是main函數中最重要的地方了。

ROSLaunchParent類的定義是在同一路徑下的parent.py文件中。為什么叫LaunchParent筆者也不清楚。

先不管它,我們再看日志,發現運行到了下面這個函數,它打算啟動XMLRPC服務器端。

所以調用的順序是:roslaunch_ init _.py文件中的main()函數調用parent.pystart()函數,start()函數調用自己類中的_start_infrastructure()函數,_start_infrastructure()函數調用自己類中的_start_server()函數,_start_server()函數再調用server.py中的start函數。

def _start_server(self):
        self.logger.info("starting parent XML-RPC server")
        self.server = roslaunch.server.ROSLaunchParentNode(self.config, self.pm)
        self.server.start()

我們再進到server.py文件中,找到ROSLaunchNode類,里面的start函數又調用了父類XmlRpcNode中的start函數。

class ROSLaunchNode(xmlrpc.XmlRpcNode):
    """
    Base XML-RPC server for roslaunch parent/child processes
    """
    def start(self):
        logger.info("starting roslaunch XML-RPC server")
        super(ROSLaunchNode, self).start()

我們來到ros_comm-noetic-develtoolsrosgraphsrcrosgraph路徑,找到xmlrpc.py文件。找到class XmlRpcNode(object)類,再進入start(self)函數,發現它調用了自己類的run函數,run函數又調用了自己類中的_run函數,_run函數又調用了自己類中的_run_init()函數,在這里才調用了真正起作用的ThreadingXMLRPCServer類。

因為master節點是用python實現的,所以,需要有python版的XMLRPC庫。

幸運的是,python有現成的XMLRPC庫,叫SimpleXMLRPCServer。SimpleXMLRPCServer已經內置到python中了,無需安裝。

所以,ThreadingXMLRPCServer類直接繼承了SimpleXMLRPCServer,如下。

class ThreadingXMLRPCServer(socketserver.ThreadingMixIn, SimpleXMLRPCServer)
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4306

    瀏覽量

    62431
  • MASTER
    +關注

    關注

    0

    文章

    103

    瀏覽量

    11262
  • ROS
    ROS
    +關注

    關注

    1

    文章

    276

    瀏覽量

    16967
收藏 人收藏

    評論

    相關推薦

    什么是服務器虛擬化?私人云服務器

    什么是 服務器虛擬化 ? 服務器虛擬化是一種將物理服務器轉化為虛擬服務器的過程,使得多個虛擬服務器可以在同一臺物理
    的頭像 發表于 08-08 10:44 ?1290次閱讀

    labview Web服務器如何啟動?

    labview利用web服務器發布網頁時,想在瀏覽中預覽時無法啟動web服務器
    發表于 04-12 07:59

    許可證服務器無法啟動

    :flexnetls-nvidia.service-LSB:啟動和停止FlexNet許可證服務器 已加載:已加載(/etc/init.d/flexnetls-nvidia;錯誤;供應商預設:已啟用) 活動:失?。ńY果:退出
    發表于 09-18 16:15

    Linux下的形式啟動和關閉服務器思路介紹

    最近用maven工程的形式打jar包寫一個小型服務器,于是希望提供腳本的形式啟動和關閉服務器。
    發表于 07-12 06:09

    啟動時的Web服務器問題

    背景:MPLAB X IDE v3.65,XC32 v1.44,PIC32MZ2048EFH100,Harmony v2.03b,LAN8720一切都與HTTP服務器配合得很好,但是在它工作之前,我
    發表于 03-09 09:01

    Tomcat服務器簡介

    簡介簡介Tomcat服務器是一個開放源碼的輕量級Web應用服務器,非常適合搭建微服務應用。Embedded Tomcat嵌入式Tomcat服務器則無需部署外置tomcat,開發者只需引
    發表于 12-16 08:24

    如何解決“無法啟動GDB服務器”的問題?

    我正在嘗試使用 CUBEIDE 對 STM32F103C8T6 進行編程。在解決了這么多錯誤之后,我現在遇到了這個錯誤“無法啟動 GDB 服務器”,嘗試了不同的端口號,并將調試概率從“OPEN OCD”更改為“GDB SERVER”,但無濟于事。
    發表于 12-02 06:25

    用AT+CIPSERVER=1,80啟動服務器時,可以啟動UDP服務器嗎?

    大家好, 我剛收到新的 esp 板,我發現有了新固件,我無法使用 AT 命令 AT+GMR 啟動 UDP 服務器,給我的是: 代碼:全選AT version:0.21.0.0 SDK version
    發表于 05-15 07:27

    服務器,服務器的作用是什么?

    服務器,服務器的作用是什么? 戴爾服務器服務器指一個管理資源并為用戶提供服務的計算機軟件,通常分為文件
    發表于 04-06 17:18 ?2.8w次閱讀

    存儲服務器怎么配置_存儲服務器的作用

    安裝目錄默認為:IVM S-4200 NiVM S-4200 Storage ) , 打開存儲服務器。在電腦右下角任務欄中顯示,表示服務器啟動成功。
    發表于 05-06 15:18 ?5209次閱讀

    如何重新啟動Linux服務器

    使用個人電腦工作的時候,可能會因為各種原因而關閉機器。對于 Linux 初學者來說,與電源相關(關機、重啟等)的任務總是最后才想到如何去實現的,所以有可能對于如何重新啟動遠程服務器不太了解。今天我們介紹一些可以用來通過終端來重新啟動
    的頭像 發表于 05-14 16:03 ?2441次閱讀

    ROS是如何實現XMLRPC

    XMLRPC的C++代碼在下載后的ros_comm-noetic-develutilitiesxmlrpcpp路徑下。 還好,整個工程不算太大。XMLRPC分成客戶端和服務器端兩大部分。 咱們先看
    的頭像 發表于 09-14 17:45 ?690次閱讀

    節點是如何調用XMLRPC

    。 而節點與master對話使用的就是XMLRPC。 從這一點來看,master叫節點管理確實名副其實,它是一個大管家,給剛出生的節點提供服務。 下面我們以兩個節點:talker和listener為例,介紹其通過
    的頭像 發表于 09-14 17:52 ?745次閱讀
    節點是如何調用<b class='flag-5'>XMLRPC</b>的

    服務器數據恢復—非正常關機導致服務器文件丟失的數據恢復案例

    ;分析: 服務器在運行過程中自動關機且無法啟動,服務器管理員對服務器進行修復后成功啟動服務器
    的頭像 發表于 01-19 13:42 ?466次閱讀

    服務器數據恢復—Linux網站服務器硬盤出現壞扇區的數據恢復案例

    服務器數據恢復環境: 一臺linux操作系統網站服務器,該服務器上部署了幾十個網站,使用一塊SATA硬盤。 服務器故障&原因: 服務器
    的頭像 發表于 10-09 16:26 ?170次閱讀