在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內(nèi)不再提示

XMLRPC服務(wù)器如何啟動

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

roscore調(diào)用了roslaunch.main,我們繼續(xù)追蹤,進到ros_comm-noetic-develtoolsroslaunchsrcroslaunch文件夾中,發(fā)現(xiàn)有個__init__.py文件,說明這個文件夾是一個python包,打開__init__.py文件找到def main(argv=sys.argv),這就是roscore調(diào)用的函數(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í)行的順序。

我們?nèi)buntu的.ros/log/路徑下,打開roslaunch-ubuntu-52246.log日志文件,內(nèi)容如下。

圖片

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

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

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

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

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

所以調(diào)用的順序是:roslaunch_ init _.py文件中的main()函數(shù)調(diào)用parent.pystart()函數(shù),start()函數(shù)調(diào)用自己類中的_start_infrastructure()函數(shù),_start_infrastructure()函數(shù)調(diào)用自己類中的_start_server()函數(shù),_start_server()函數(shù)再調(diào)用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ù)又調(diào)用了父類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)它調(diào)用了自己類的run函數(shù),run函數(shù)又調(diào)用了自己類中的_run函數(shù),_run函數(shù)又調(diào)用了自己類中的_run_init()函數(shù),在這里才調(diào)用了真正起作用的ThreadingXMLRPCServer類。

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

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

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

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

    關(guān)注

    3

    文章

    4344

    瀏覽量

    62827
  • MASTER
    +關(guān)注

    關(guān)注

    0

    文章

    104

    瀏覽量

    11302
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    279

    瀏覽量

    17042
收藏 人收藏

    評論

    相關(guān)推薦

    什么是服務(wù)器虛擬化?私人云服務(wù)器

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

    labview Web服務(wù)器如何啟動

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

    許可證服務(wù)器無法啟動

    :flexnetls-nvidia.service-LSB:啟動和停止FlexNet許可證服務(wù)器 已加載:已加載(/etc/init.d/flexnetls-nvidia;錯誤;供應(yīng)商預(yù)設(shè):已啟用) 活動:失敗(結(jié)果:退出
    發(fā)表于 09-18 16:15

    Linux下的形式啟動和關(guān)閉服務(wù)器思路介紹

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

    啟動時的Web服務(wù)器問題

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

    Tomcat服務(wù)器簡介

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

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

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

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

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

    服務(wù)器,服務(wù)器的作用是什么?

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

    存儲服務(wù)器怎么配置_存儲服務(wù)器的作用

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

    如何重新啟動Linux服務(wù)器

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

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

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

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

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

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

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

    服務(wù)器數(shù)據(jù)恢復(fù)—非正常關(guān)機導(dǎo)致服務(wù)器文件丟失的數(shù)據(jù)恢復(fù)案例

    ;分析: 服務(wù)器在運行過程中自動關(guān)機且無法啟動服務(wù)器管理員對服務(wù)器進行修復(fù)后成功啟動服務(wù)器
    的頭像 發(fā)表于 01-19 13:42 ?559次閱讀
    主站蜘蛛池模板: 女人张开腿等男人桶免费视频| 操综合网| 色5月婷婷| 推倒都市极品贵妇| 日本一区免费在线观看| 性做久久久久久| 福利三区| 天堂bt资源在线官网| 欧洲一级鲁丝片免费| 蕾丝视频在线播放| 日本a级片在线播放| 四虎影院新网址| 日韩特级片| 毛茸茸成熟妇女亚洲人| 国产你懂的在线| 黄网站色成年片大免费软件| 国产精品yy9299在线观看| 91色多多| 久久精品国波多野结衣| 色综合小说天天综合网| 国产午夜在线观看视频播放| japan日韩xxxx69hd| 男男互攻h啪肉np文厉世| 五月婷婷六月丁香| 免费在线欧美| 色播视频网站| 久久综合狠狠综合久久| 高清配种视频xxxxx| 午夜逼逼| 天天操天天插| 国产成人综合网在线播放| 亚洲一区免费在线观看| 一区二区在线免费视频| 在线黄色免费观看| 日韩免费精品视频| 国产成人免费无庶挡视频| 色综合视频| 一区在线免费观看| 视频一区日韩| 国产美女免费观看| 久久天天躁狠狠躁夜夜2020一|