• <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>

            Sheppard Y

            keep thinking keep coding.

            集群實現細節(2)-玩家在線狀態續

            2016-07-11 日更新 
            此篇博客已經遷移到新博客,并做行文檢查和優化排版:
            http://blog.clawz.me/2013/10/19/13-game-cluster-design-detail-2/

             


             

            一、玩家離線

                由于離線的狀況多,常見的玩家自己拿自己的賬號的離線,也有自己的賬號在多個設備來擠掉線,還有就是被非法的人使用時的擠掉線。這里應該將玩家理解為一個賬號,下邊盡量用賬號來表述。

            (一)網絡斷開或者主動離開游戲

                這時玩家所在的服務器在玩家net.close時加入向通信redis匯報的邏輯,即通信redis里刪除這個玩家的在線紀錄。

             

            (二)同服重復登陸時的kick

                首先肯定要踢掉之前登陸的鏈接。因為同服時新舊鏈接都在這個服務器上,邏輯上簡單,允許新鏈接的登陸比較好處理,但是后邊有其他考慮。

             

            (三)異服登陸時的kick

                首先也是踢掉之前的登陸。需要在之前登陸到的服務器將該賬號的鏈接斷開并整理數據存儲之后,才能允許在新的服務器登陸。

                舊服務器清理完該玩家后,向通信redis報告刪除該賬號的在線狀態。新服務器需要知道玩家已經在舊服被kick完了才可以讓玩家登陸。剛才同服時提到的允許新鏈接立刻登陸的問題,這里就變的比較不可控了。美好的過程是,新鏈接接入后掛起在新服,等異服踢完后,繼續做新鏈接的登陸操作。但是這需要新舊服之間的同步邏輯,需要將新服玩家做個狀態機為維護這種掛起或繼續登陸狀態。另外還要考慮這個期間玩家又在另一個服登陸。要考慮的東西很多……

                還有一種有問題的處理方式,即新服只是向老服發送踢人指令,新服自己卻馬上進入新鏈接的登陸操作。這樣的問題是,即使業務邏輯簡單到不會發生數據不同步問題,但登陸操作不會一定成功。新服登陸完向通信redis報告玩家在線,舊服踢完要向通信redis報告玩家離線。這兩個操作異步時,如果舊服的離線報告在后,通信redis上就會錯誤的記錄賬號當前不在線……

             

            (四)總結

                最終重復登陸問題簡單處理方法:賬號登陸時,只要檢測到該賬號同服或異服已登陸,先將舊鏈接踢掉,再將新鏈接斷開。就給玩家一個提示“賬號已登錄,請稍后重試”,讓玩家自己來多操作幾次,直到舊鏈接被踢完。

                

            二、同一賬號的同瞬間多起登陸事件

                ​上邊重復登陸的檢查還有一種情況不能防止,就是瞬間的多個客戶端用同一賬號登陸。同服時由于nodejs的異步,異服時由于天然異步,檢查該賬號是否已登陸與將當前鏈接成功登陸并向通信redis報告這些操作不具原子性。

                ​所以在最后向通信redis寫入上線狀態時再次判斷是否已登陸(即判斷是否被瞬時并發的另一個客戶端的登陸給標記為已上線了)。redis里用hsetnx代替hset,前者在數據已經被設置時操作失敗。

            PS:

                剛接觸不久或者本身邏輯就復雜的東西(例如分布式)很多思考的結果不及時記錄的話,后邊容易忘記當初的理由,導致需要冗余的重復思考。所以現在博客寫瑣碎些,記載些細節的思考。

             

             

            posted on 2013-10-19 09:41 Sheppard Y 閱讀(952) 評論(0)  編輯 收藏 引用 所屬分類: 設計架構

            <2013年12月>
            24252627282930
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            導航

            統計

            留言簿(1)

            隨筆分類(77)

            隨筆檔案(58)

            me

            基友

            同行

            業界前輩

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            亚洲国产精品一区二区久久hs| 国产精品视频久久| 久久天天日天天操综合伊人av| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 久久精品国产91久久麻豆自制| 国内精品免费久久影院| 欧洲人妻丰满av无码久久不卡| 久久97精品久久久久久久不卡| 亚洲一本综合久久| 久久99精品久久久久久久不卡 | 国产精品久久久久久吹潮| 青青草原综合久久| 久久精品九九亚洲精品| 中文字幕久久亚洲一区| 99精品久久久久中文字幕| 狠狠综合久久综合中文88 | 亚洲国产精品无码久久一线| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 精品久久久久久国产免费了| 亚洲av成人无码久久精品| 久久国产成人精品国产成人亚洲| 亚洲精品美女久久久久99| 久久久久久无码国产精品中文字幕| 伊人热人久久中文字幕| 亚洲色大成网站www久久九| 久久综合色老色| 亚洲精品高清一二区久久| 久久婷婷综合中文字幕| 无码人妻少妇久久中文字幕蜜桃 | 欧美日韩精品久久久免费观看| 国产精品久久久久影院嫩草| 亚洲人AV永久一区二区三区久久| 国产精品VIDEOSSEX久久发布 | 久久久久高潮毛片免费全部播放| 亚洲人AV永久一区二区三区久久 | 国产巨作麻豆欧美亚洲综合久久| 久久精品国产半推半就| 99久久综合狠狠综合久久止| 91久久婷婷国产综合精品青草 | 久久99精品国产麻豆蜜芽| 久久国产精品-久久精品|