[egret+pomelo]實時遊戲雜記(2)

[egret+pomelo]學習筆記(1)html

[egret+pomelo]學習筆記(2)前端

[egret+pomelo]學習筆記(3)json

 pomelo

pomelo服務端介紹(game-server/config/server.json):服務器

{
  "development": {
    "connector": [
      {"id": "connector-server-1", "host": "127.0.0.1", "port": 3150, "clientPort": 3010, "frontend": true},
      {"id": "connector-server-2", "host": "127.0.0.1", "port": 3151, "clientPort": 3011, "frontend": true}
    ],
    "area": [
      {"id": "area-server-1", "host": "127.0.0.1", "port": 3250, "areaId": 1}
    ],
    "gate": [
      {"id": "gate-server-1", "host": "127.0.0.1", "clientPort": 3014, "frontend": true}
    ]
  }
}

能夠看出,服務端是由如下幾個部分構成:session

* 2 個 `connector` 服務器,主要用於接受和發送消息。
* 1 個 `gate` 服務器,主要用於負載均衡,未來自客戶端的鏈接分散到兩個 `connector` 服務器上。
* 1 個 `area` 服務器,主要用於驅動遊戲場景,和遊戲邏輯負載均衡

由服務端的關係圖能夠看出,訪問pomelo,首先應該訪問gate服務端,讓服務端爲其分配合適的connector以處理當前用戶的請求。frontend

egret

1.連接gate服務端,將玩家名稱傳遞給gate服務端以做爲註冊ide

config.global.pomelo.request("gate.gateHandler.queryEntry", { uid: config.global.playerName }, this.onGateMsg);

2.當gate服務端連接返回成功後,連接gate服務端返回的地址,連接分配給本身的connector服務端學習

    private onGateMsg(gate_data) {
        this.connectIp = gate_data.host;
        this.connectPort = gate_data.port;
        config.global.pomelo.disconnect();
        trace("正在嘗試連接connect服務端...");
        config.global.pomelo.open(network.PomeloService.CONNECTION, this.connectIp, this.connectPort);
    }

3.使用connector.entryHandler.entry在connector中註冊,註冊成功後,使用area.playerHandler.enterScene訪問遊戲場景信息ui

    private onConnectSucceed() {
        trace("CONNECT服務端連接成功");
        trace("開始註冊服務端信息...");
        config.global.pomelo.request('connector.entryHandler.entry', { name: config.global.playerName }, this.onEntryMsg);
    }

    private onEntryMsg(entry_data) {
        if (entry_data.code === 200) {
            trace("註冊信息成功");
            trace("開始申請進入遊戲...");
            config.global.pomelo.request('area.playerHandler.enterScene', { name: config.global.playerName, playerId: entry_data.playerId }, (respose) => {
                Global.dispatchEvent(events.PomeloServerEvents.MAPMSG, respose);
                trace("進入遊戲成功");
                trace("開始解析地圖信息");
            });
        } else {
            trace("註冊服務端信息出現問題,請檢查提交信息");
        }
    }

4.遊戲中會將地下散落的物品、玩家的位置以json格式返回 給客戶端(返回的數據示例)

{
    "code": 200,
    "data": {
        "area": {
            "id": "1",
            "entities": {
                "1": {
                    "x": 2041,
                    "y": 256,
                    "entityId": 1,
                    "kindId": "3",
                    "kindName": "極限法劍",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 301804,
                    "score": 20
                },
                "2": {
                    "x": 1354,
                    "y": 633,
                    "entityId": 2,
                    "kindId": 86,
                    "kindName": "威嚴腿鎧",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 344721,
                    "score": 80
                },
                "3": {
                    "x": 719,
                    "y": 460,
                    "entityId": 3,
                    "kindId": 103,
                    "kindName": "護身符",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 980057,
                    "score": 1
                },
                "4": {
                    "x": 246,
                    "y": 1003,
                    "entityId": 4,
                    "kindId": 64,
                    "kindName": "玉樹Belt",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 371501,
                    "score": 25
                },
                "5": {
                    "x": 1343,
                    "y": 426,
                    "entityId": 5,
                    "kindId": 15,
                    "kindName": "緊身衣",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 331203,
                    "score": 21
                },
                "6": {
                    "x": 417,
                    "y": 336,
                    "entityId": 6,
                    "kindId": 75,
                    "kindName": "幻彩玉帶",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 374224,
                    "score": 90
                },
                "7": {
                    "x": 1311,
                    "y": 262,
                    "entityId": 7,
                    "kindId": 73,
                    "kindName": "百竄雲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 374222,
                    "score": 80
                },
                "8": {
                    "x": 1385,
                    "y": 870,
                    "entityId": 8,
                    "kindId": 57,
                    "kindName": "熒光墜子",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 384921,
                    "score": 71
                },
                "9": {
                    "x": 432,
                    "y": 1044,
                    "entityId": 9,
                    "kindId": 111,
                    "kindName": "靈魂之石",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 90102,
                    "score": 85
                },
                "10": {
                    "x": 910,
                    "y": 451,
                    "entityId": 10,
                    "kindId": 21,
                    "kindName": "鎖子甲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 334303,
                    "score": 80
                },
                "11": {
                    "x": 982,
                    "y": 160,
                    "entityId": 11,
                    "kindId": 21,
                    "kindName": "鎖子甲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 334303,
                    "score": 80
                },
                "12": {
                    "x": 746,
                    "y": 374,
                    "entityId": 12,
                    "kindId": 32,
                    "kindName": "流雲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 394224,
                    "score": 64
                },
                "13": {
                    "x": 894,
                    "y": 827,
                    "entityId": 13,
                    "kindId": 32,
                    "kindName": "流雲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 394224,
                    "score": 64
                },
                "14": {
                    "x": 1027,
                    "y": 724,
                    "entityId": 14,
                    "kindId": 73,
                    "kindName": "百竄雲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 374222,
                    "score": 80
                },
                "15": {
                    "x": 699,
                    "y": 156,
                    "entityId": 15,
                    "kindId": 60,
                    "kindName": "Belt",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 371101,
                    "score": 1
                },
                "16": {
                    "x": 881,
                    "y": 792,
                    "entityId": 16,
                    "kindId": 109,
                    "kindName": "聖母之鏡",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 90412,
                    "score": 61
                },
                "17": {
                    "x": 1442,
                    "y": 96,
                    "entityId": 17,
                    "kindId": 62,
                    "kindName": "銀Belt",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 371201,
                    "score": 13
                },
                "18": {
                    "x": 1754,
                    "y": 265,
                    "entityId": 18,
                    "kindId": 84,
                    "kindName": "獨孤腿鎧",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 344701,
                    "score": 66
                },
                "19": {
                    "x": 1384,
                    "y": 279,
                    "entityId": 19,
                    "kindId": 13,
                    "kindName": "布衣",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 331103,
                    "score": 1
                },
                "20": {
                    "x": 1277,
                    "y": 439,
                    "entityId": 20,
                    "kindId": 108,
                    "kindName": "鑽石之星",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 90472,
                    "score": 51
                },
                "21": {
                    "x": 53,
                    "y": 313,
                    "entityId": 21,
                    "kindId": 53,
                    "kindName": "骷髏吊墜",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 381701,
                    "score": 31
                },
                "22": {
                    "x": 965,
                    "y": 367,
                    "entityId": 22,
                    "kindId": 73,
                    "kindName": "百竄雲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 374222,
                    "score": 80
                },
                "23": {
                    "x": 146,
                    "y": 94,
                    "entityId": 23,
                    "kindId": 69,
                    "kindName": "攫魂鈴",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 371803,
                    "score": 55
                },
                "24": {
                    "x": 374,
                    "y": 400,
                    "entityId": 24,
                    "kindId": 100,
                    "kindName": "荒蕪之鞋",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 364724,
                    "score": 70
                },
                "25": {
                    "x": 1668,
                    "y": 807,
                    "entityId": 25,
                    "kindId": 105,
                    "kindName": "先祖護符",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 980055,
                    "score": 21
                },
                "26": {
                    "x": 875,
                    "y": 384,
                    "entityId": 26,
                    "kindId": 39,
                    "kindName": "布帽",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 321101,
                    "score": 17
                },
                "27": {
                    "x": 1799,
                    "y": 146,
                    "entityId": 27,
                    "kindId": 105,
                    "kindName": "先祖護符",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 980055,
                    "score": 21
                },
                "28": {
                    "x": 1543,
                    "y": 384,
                    "entityId": 28,
                    "kindId": 31,
                    "kindName": "風雲雷電",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 394223,
                    "score": 56
                },
                "29": {
                    "x": 668,
                    "y": 1083,
                    "entityId": 29,
                    "kindId": 73,
                    "kindName": "百竄雲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 374222,
                    "score": 80
                },
                "30": {
                    "x": 1884,
                    "y": 420,
                    "entityId": 30,
                    "kindId": 61,
                    "kindName": "緞帶",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 371103,
                    "score": 7
                },
                "31": {
                    "x": 2022,
                    "y": 715,
                    "entityId": 31,
                    "kindId": 48,
                    "kindName": "媚狐頭飾",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 324701,
                    "score": 85
                },
                "32": {
                    "x": 1568,
                    "y": 1138,
                    "entityId": 32,
                    "kindId": "9",
                    "kindName": "豐城劍",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 304504,
                    "score": 68
                },
                "33": {
                    "x": 1219,
                    "y": 747,
                    "entityId": 33,
                    "kindId": 63,
                    "kindName": "水晶Belt",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 371401,
                    "score": 19
                },
                "34": {
                    "x": 1696,
                    "y": 1146,
                    "entityId": 34,
                    "kindId": 16,
                    "kindName": "鱗甲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 331303,
                    "score": 31
                },
                "35": {
                    "x": 881,
                    "y": 563,
                    "entityId": 35,
                    "kindId": 54,
                    "kindName": "蒼魂珠",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 384222,
                    "score": 41
                },
                "36": {
                    "x": 1983,
                    "y": 456,
                    "entityId": 36,
                    "kindId": 101,
                    "kindName": "玉衡之履",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 364803,
                    "score": 85
                },
                "37": {
                    "x": 268,
                    "y": 164,
                    "entityId": 37,
                    "kindId": 88,
                    "kindName": "斬魂腿甲",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 344922,
                    "score": 90
                },
                "38": {
                    "x": 1373,
                    "y": 1047,
                    "entityId": 38,
                    "kindId": "8",
                    "kindName": "寒雪槍",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 304501,
                    "score": 60
                },
                "39": {
                    "x": 964,
                    "y": 790,
                    "entityId": 39,
                    "kindId": 26,
                    "kindName": "摺扇",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 391201,
                    "score": 18
                },
                "40": {
                    "x": 1257,
                    "y": 1099,
                    "entityId": 40,
                    "kindId": 66,
                    "kindName": "白麪狼牙",
                    "areaId": 1,
                    "type": "treasure",
                    "imgId": 371601,
                    "score": 37
                },
                "54": {
                    "x": 436,
                    "y": 208,
                    "entityId": 54,
                    "kindId": 210,
                    "areaId": 1,
                    "id": 214,
                    "type": "player",
                    "name": "ss",
                    "walkSpeed": 240,
                    "score": 0
                }
            },
            "width": 2200,
            "height": 1201
        },
        "playerId": 214
    }
}
View Code

5.客戶端根據返回的json,顯示裝備和玩家位置,並監聽服務端中的移動以及狀態更改事件,來作出相應的操做。

 

下面來看一下,pomelo服務端中是怎麼處理前端的請求的。

在treasures的項目文檔docs/tutorial.md 中給出的示例以下圖

 

在(1)中,客戶端經過pomelo.request方法,將gate.gateHandler.queryEntry 以及參數 uid 傳遞給gate服務端,下一步,咱們進入服務端看一下(2)路徑中的gateHandler文件

該方法爲當前用戶獲取一個connector服務端,將用戶uid參數與獲取到的connector服務端綁定,並將分配後的connector服務端的獲取狀態code,連接host,端口port,返回給客戶端進行處理,客戶端在經過gate服務端接收到返回的參數後,就能夠將gate服務端斷開,而後連接分配給本身的connector服務端進行連接,經過 connector.entryHandler.entry,connector服務端會在用戶第一次連接的時候初始化session信息,這樣每次的服務端請求的時候,都不用再次 傳遞多餘的數據。

entry方法成功後會向用戶返回一個狀態code 和玩家惟一標識playerId,客戶端記住玩家惟一標識,以區分同場景中多個玩家時,哪個玩家爲本身的玩家。

這樣一條用戶請求和服務端返回的流程就走完了。

相關文章
相關標籤/搜索