chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

XMLRPC服務器如何啟動

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月居 ? 2023-09-14 17:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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:
           # 這里沒執(zhí)行到,就不列出來了
        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函數(shù)執(zhí)行的順序。

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

圖片

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

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

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

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

先不管它,我們再看日志,發(fā)現(xiàn)運行到了下面這個函數(shù),它打算啟動XMLRPC服務器端。

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

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函數(shù)又調用了父類XmlRpcNode中的start函數(shù)。

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)函數(shù),發(fā)現(xiàn)它調用了自己類的run函數(shù),run函數(shù)又調用了自己類中的_run函數(shù),_run函數(shù)又調用了自己類中的_run_init()函數(shù),在這里才調用了真正起作用的ThreadingXMLRPCServer類。

因為master節(jié)點是用python實現(xiàn)的,所以,需要有python版的XMLRPC庫。

幸運的是,python有現(xiàn)成的XMLRPC庫,叫SimpleXMLRPCServer。SimpleXMLRPCServer已經(jīng)內置到python中了,無需安裝。

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

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

    關注

    3

    文章

    4401

    瀏覽量

    66542
  • MASTER
    +關注

    關注

    0

    文章

    110

    瀏覽量

    12058
  • ROS
    ROS
    +關注

    關注

    1

    文章

    290

    瀏覽量

    18334
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    labview Web服務器如何啟動?

    labview利用web服務器發(fā)布網(wǎng)頁時,想在瀏覽中預覽時無法啟動web服務器。
    發(fā)表于 04-12 07:59

    許可證服務器無法啟動

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

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

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

    啟動時的Web服務器問題

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

    Tomcat服務器簡介

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

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

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

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

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

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

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

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

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

    如何重新啟動Linux服務器

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

    ROS是如何實現(xiàn)XMLRPC

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

    節(jié)點是如何調用XMLRPC

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

    ROS中節(jié)點管理master是如何被啟動

    我們來看看節(jié)點管理master是如何被啟動的,再回到parent.pystart()函數(shù),如下。 我們發(fā)現(xiàn)它啟動XMLRPC服務器后,接
    的頭像 發(fā)表于 09-14 18:03 ?2279次閱讀

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

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