- 百萬在線:大型游戲服務端開發
- 羅培羽
- 428字
- 2021-09-17 17:04:56
2.5 做聊天室,學習多人交互
在游戲中各玩家可以交互,這在2.4節的基礎上很容易實現。
2.5.1 功能需求
圖2-17所示為客戶端發送一條消息,經由服務端轉發,所有在線客戶端都能收到。

圖2-17 聊天室示意圖
2.5.2 代碼實現
修改2.4節的Echo程序來實現交互功能(如代碼2-7所示),其中加底紋的語句值得特別注意,此程序的結構和1.2.4節的示例很相似。
首先定義名為clients的表,用于存放客戶端連接,它將以連接標識fd為索引來保存連接信息。當客戶端建立連接時,connect被調用,它會通過“clients[fd]={}”把新的fd存放到clients表中。本例較簡單,將以空表{}代表客戶端的信息。斷開連接時,通過clients[fd]=nil刪除客戶端信息。若在此過程中接收到數據,則遍歷clients表,逐個轉發。
代碼2-7 examples/Pmain.lua中的部分內容
(資源:Chapter2/4_chat.lua)
function connect(fd, addr) --啟用連接 print(fd.." connected addr:"..addr) socket.start(fd) --消息處理 while true do local readdata=socket.read(fd) --正常接收 if readdata~=nil then print(fd.." recv "..readdata) --斷開連接 else print(fd.." close ") socket.close(fd) end end end
本節程序很簡單,下面留一個作業給讀者。還記得1.4.3節的“搭個簡單的分布式服務端”嗎?現在你已完全掌握用Skynet實現此功能的全部知識,結合ping程序,嘗試用Skynet引擎搭建它。
推薦閱讀
- 微服務設計(第2版)
- Java程序設計實戰教程
- Beginning Java Data Structures and Algorithms
- Visual Studio 2012 Cookbook
- 編程卓越之道(卷3):軟件工程化
- Network Automation Cookbook
- Mastering Swift 2
- Python從入門到精通
- Instant Zurb Foundation 4
- UML軟件建模
- PhoneGap 4 Mobile Application Development Cookbook
- Android移動應用項目化教程
- Learning Kotlin by building Android Applications
- Tableau Dashboard Cookbook
- Python計算機視覺與深度學習實戰