用python來開發webgame服務端(3)

來源:互聯網
上載者:User
刺鳥原創文章,轉載請註明出處
    在之前的準備工作中,我們已經 建立了一個socket伺服器 ,並且經過了 簡單的測試 ,得到的結論是python可以滿足我們的需求,那麼接下來,我們要解決的是身為webgame服務端必須的幾個功能模組:

     一、記錄和維護所有客戶機的狀態
     更新:按照jinmin_lan同學的建議,這裡直接用self.transport.sessionno即可,查twisted文檔的時候我忽略了這個東西。因此無需按照我下面的方法來手動維護,好吧,我造了一次輪子……     

    為了實現這個功能,我們先回過頭來分析下之前的服務端代碼:
    1、每個用戶端串連會有一個gameSocket對象被建立,然後觸發connectionMade事件。
    2、用戶端資料到達的時候觸發dataReceived事件
    3、串連斷開的時候觸發connectionLost事件,然後對象被析構

    根據通常的處理思路,我們需要為每個用戶端建立一個編號,即傳說中的sockid,然後維護一個client和sockid之間的雙向字典,以便我們能夠簡單的互相反查。我決定維護2份資料,以空間換時間,建立一個sockMana類來實現該功能:
# sockmana.py class SockMana:     def __init__ (self):         self.sockNum = 0 #記錄當前的線上總數         self.sockIndex = 1 #累加sockid         self.client2id = {} #儲存client->sockid字典         self.id2client = {} #儲存sockid->client字典     def addClient(self,client):         #增加一個用戶端         print '** add client **'         self.sockNum = self.sockNum + 1         self.client2id[client] = self.sockIndex         self.id2client[self.sockIndex] = client         self.sockIndex = self.sockIndex + 1         print self.sockNum         print self.client2id         print self.id2client          def delClient(self,client):         #刪除一個用戶端         print '** del client **'         if client in self.client2id:             self.sockNum = self.sockNum - 1             _sockid = self.client2id[client]             del self.client2id[client]             del self.id2client[_sockid]             print self.client2id             print self.id2client          def getSockid(self,client):         #通過client擷取sockid         if client in self.client2id:             return self.client2id[client]         else:             return None              def getClient(self,sockid):         #通過sockid擷取client         if sockid in self.id2client:             return self.id2client[sockid]         else:             return None     #初始化連線管理員 sockMana = SockMana()
    接下來在我們的socket服務端代碼中import它,並增加呼叫事件,然後略修改dataReceived事件,當收到用戶端資料的時候,我們向用戶端返回它的sockid,完整的服務端代碼調整為:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.