天天看點

Nodejs實作的一個多人同時線上移動滑鼠的小遊戲

安裝socket.io,使用指令<code>npm install socket.io</code>

windows系統的話,需要vc編譯環境,因為安裝<code>socket.io</code>的時候,會編譯vc代碼

伺服器監聽用戶端的連接配接

用戶端連接配接成功時候,綁定頁面移動滑鼠事件,事件裡處理發送目前坐标給伺服器

伺服器儲存一個全局的坐标對象,并以用戶端唯一編号為鍵值

有新連接配接來的時候,把坐标廣播給其它用戶端

用戶端斷開連接配接的時候,服務端删除它的坐标資訊,并廣播給其它用戶端

scoket.io建立伺服器監聽的時候,需要依賴一個http連接配接,用來處理更新協定用,是以也需要一個http子產品,代碼如下

然後定義一個全局的坐标對象

開始監聽用戶端的連接配接,并新增廣播函數(其實可用socket.io自帶的廣播方法io.sockets.broadcast.emit),核心代碼如下

分析上面的代碼,關鍵點在于

新的用戶端連接配接成功,發送其它用戶端的坐标資訊

用戶端更新坐标資訊的時候,通知其它用戶端

用戶端斷開連接配接,通知其它用戶端

廣播消息類型分為修改坐标與移除坐标

由于<code>socket.io</code>是自定義的架構,是以用戶端需要引用socket.io.js,這個js可以從<code>socket.io</code>子產品裡查找,路徑一般為<code>node_modules\socket.io\node_modules\socket.io-client\dist</code>,裡面有合并與壓縮兩個版本,開發的時候可以用合并版.

完整代碼如下

連接配接成功時,綁定頁面mousemove事件,裡面處理發送新坐标消息

收到消息根據消息類型,處理是修改其它用戶端消息,還是移除其它用戶端消息

定義添加其它用戶端cursor圖示與移除cursor圖示

處理用戶端異常消息,并添加斷開連接配接,以讓服務端移除坐标資訊

儲存伺服器代碼為io_multigame.js

儲存用戶端代碼為io_multigame.html

運作伺服器代碼<code>node io_multigame.js</code>

打開多個<code>io_multigame.html</code>頁面,即可看到效果

寫的比較随意,參考了<code>了不起的nodejs</code>,這是一本好書,想了解<code>nodejs</code>的朋友們,可以看看這本書。

繼續閱讀