• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            使用得心應手的IDE來開發應用程序,可以使我們的工作事半功倍。而調試則更可以讓我們準確的定位BUG,發現問題。
            本文講述如何使用 WebStorm 這個怪獸級JavaScript IDE來調試 Chat of Pomelo
            如果你更喜歡 Eclipse 等其他IDE,希望本文也可以有一些幫助。

            前言

            • 首先我們需要知道,NodeJS應用程序可以在運行命令中加入--debug=5858參數,可以使得NodeJS程序監聽本地5858端口,并開啟調試模式。

            • 其次,Pomelo的運行原理是:pomelo start時,啟動了master服務器,然后其先讀取配置文件,再啟動由game-server/config/servers.json文件中經過配置的各個服務器進程。其中,你看到的idhostport等等都是子服務器的啟動參數,這些參數都會放到啟動命令行中app.js的后面。

            • 再次,Pomelo的設計人員最初已經考慮到了直接在nodeapp.js前添加參數的簡便方法:在服務器配置文件中,配置條目中插入"args": " 你想要的參數 "后,便可以你指定的參數運行node

            修改配置以啟動帶有調試模式的服務器

            一、打開文件

            打開game-server/config/servers.json。為了便于便于開發,我們將服務器數目縮減至每功能1個運行實例。這樣你就會看到:

            精簡過的默認服務器配置

            二、修改并保存

            我們對gate服務器的負載分配原理產生了興趣,想要調試它。這時,我們只需要在{"id": "gate-server-1", ...的行末,花括號}前,插入下面代碼, "args": " --debug=32312 "。使gate服務器的配置組變成這樣:

            gate服務器調試配置

            當再次啟動服務器時,master服務器會讀取新的配置,并以這個配置運行gate-server-1服務器。

            而該服務器的進程,會監聽32312端口,以便調試器連接。將端口設置的偏高是為了減少端口沖突的可能性。開發過程中,如果啟動后發現有報ADDRINUSE(端口已被占用)的錯誤,請使用pomelo kill --force殺光Pomelo程序,并調整此處的端口值。

            配置IDE的調試器

            一、打開Edit Configurations...對話框

            可以從運行、調試按鈕前面的小三角進入,或者從工具欄中選擇Run - Edit Configurations...

            打開Edit Configurations對話框

            二、新增一條Node.js Remote Debug

            增加 Node.js Remote Debug 配置

            gate study 調試器配置

            Name欄名字可以隨意起,但最好選擇明確易懂的。然后選中Single instance only,這樣只會啟動一個調試器。而不會有很多相同的調試器都連到后面指定的調試端口。

            下面的Host本地127.0.0.1Debug Port填入剛剛上面指定的端口號,我這里用32312,與前面配置文件中的完全一致。Local directory指定當前的game-server/app.js目錄所在目錄。

            附:運行配置

            當然你可能已經注意到了,這里的Configurations不僅包含調試,還包括運行配置。運行配置方法跟一般的NodeJS程序配置方法相同。NodeJS新人可以參考圖片中配置。注意被框的內容。

            game-server 及 web-server 運行配置舉例

            準備調試

            一、分別啟動Web、Chat服務器

            如果你有做過運行Chat和Web服務器的配置,現在就可以從運行、調試按鈕前面的配置下拉菜單中,分別選擇Chat以及Web后,點擊[►]運行按鈕。運行后,可以從IDE下方的控制臺輸出中查看日志輸出,可以檢查一下這兩個服務器的啟動是否成功。如果出現紅字,多半表示啟動失敗。你可以根據提示的報錯信息Google或者 提交Issue ,以查找解決方案。

            運行、調試配置選擇

            二、連接調試器

            再從配置下拉菜單中選擇剛剛的調試配置gate study,之后點擊[☼]調試按鈕。檢查窗口下方的Debugger,可以看到有提示說Connected to 127.0.0.1:32312

            調試器已連接

            三、設置斷點

            由于我們想調試gate服務器中,與connector分配相關的代碼,所以在IDE中,打開app/servers/gate/handler/gateHandler.js。定位到第30行 ,在此處下一個斷點。

            gateHandler.js 中的斷點

            實踐

            瀏覽器中打開 http://127.0.0.1:3001/index.html 會看到 Chat of Pomelo標題的登錄頁面。填入兩欄表單后,點擊【JOIN】按鈕。

            Chat Of Pomelo 登錄頁

            此時,頁面將不會做出任何反應,是因為服務器端的代碼被斷點攔下了。而IDE會因為調試器而被激活:

            開始調試

            下方窗口中,除了常規調試用到的StepOver、StepInto、StepOut等必須功能外,有很多好用的工具,比如即時表達式求值、切換異常發生時自動中斷……這里就不深入探討了。

            可用的聊天應用

            常識

            Web服務器啟動成功后我們可以看到它提示說可以訪問http://127.0.0.1:3001/index.html了。但我們都知道127.0.0.1是本機IP地址,如果真正要跟其他人“聊天”的話,這樣是不行的。因為別人不一定能打開127.0.0.1:3001,即便打開了,也無法跟你在一起聊天。

            所以將這里的127.0.0.1換成你自己電腦的可被網絡上其他成員訪問到的地址,我這里的地址是192.168.1.61。OK,我可以在瀏覽器里打開http://192.168.1.61:3001/index.html,因為本機調試沒有任何問題,所以我也信心滿滿的將這個地址告訴了與我同一網絡的同事。

            發現問題

            這時出現了一個問題,我自己可以登錄到聊天界面,而其他任何人都無法登錄。

            根據其他人的瀏覽器Console輸出,可以看到他們都連接一下192.168.1.61:3014端口后,又去連接127.0.0.1:3050,所以他們才無法登錄的。

            3014端口剛好是gate服務器,問題就出在這里,還是繼續調試一下吧。

            在經過一番斷點切換后,可以發現gateHandler.queryEntry最后跑到了 第39行  next函數上。

            var res = dispatcher.dispatch(uid, connectors);
            next(null, {
                code: 200,
                host: res.host,
                port: res.clientPort
            });
            

            可以看到,返回內容的 host 使用了res.hostres又來自connectorsconnectors來自配置文件。

            game-server/config/servers.jsonconnector服務器的 配置條目 ,可以清楚的看見"host":"127.0.0.1"

            解決問題

            源頭找到了,立刻將這里的127.0.0.1全部替換成我本機192.168.1.61。并且重啟Chat服務器。

            同事再刷新訪問的時候,便可以登錄進來了。

            寫在后面

            細心的人或許發現,調試器連接的IP地址,是127.0.0.1,但你或許在想,既然是叫"Remote Deubgger",應該可以連接除127.0.0.1以外的IP吧? 我也是這么想的。但是,在不借助其他工具的情況下,不能辦到。

            就是說,不借助一個代理工具,是沒辦法連接到除了127.0.0.1地址的調試端口的。

            你可以借助NodeJS官方 Wiki 文章結尾(Ctrl-F后,搜索"You probably noticed")的方法及代碼,來完成一個代理工具。以便調試部署在遠端服務器上運行的代碼。

            同時這篇文章也是 Eclipse 的調試指導文章。

            91精品国产色综合久久| 欧美午夜A∨大片久久| 久久夜色精品国产www| 99久久er这里只有精品18| 亚洲人成无码www久久久| 国产高潮国产高潮久久久91 | 久久精品国产72国产精福利| AV色综合久久天堂AV色综合在 | 久久毛片一区二区| 日韩久久无码免费毛片软件| 久久久久久极精品久久久| 国产A级毛片久久久精品毛片| 色综合久久久久| 国产午夜精品久久久久九九| 久久久久久A亚洲欧洲AV冫| 久久久久免费视频| 亚洲日本va午夜中文字幕久久 | 久久99免费视频| 亚洲国产精品一区二区久久| 国内精品久久久久国产盗摄| 久久久精品波多野结衣| 久久久久久极精品久久久| 综合久久精品色| 久久婷婷五月综合97色一本一本 | 久久综合噜噜激激的五月天| 国产精品女同久久久久电影院| 精品久久777| 久久久久久久综合日本| 一级女性全黄久久生活片免费 | 国产精品久久自在自线观看| 伊人色综合久久天天| 中文字幕无码av激情不卡久久| 青草国产精品久久久久久| 久久97精品久久久久久久不卡| 久久久亚洲精品蜜桃臀 | 亚洲AV乱码久久精品蜜桃| 国产精品九九九久久九九| 一本久久综合亚洲鲁鲁五月天| 97久久超碰成人精品网站| 久久精品综合一区二区三区| 热re99久久6国产精品免费|