一個開發者剛決定重返游戲開發,就被網絡技術勸退了。他沒寫一行游戲代碼,先被WebRTC(網頁實時通信)、P2P(點對點連接)、NAT(網絡地址轉換)這些概念繞暈,最后連BitTorrent(比特流)種子追蹤器都想用上了——結果還是不行。
從聯機打《雷神之錘3》到自己想做游戲
![]()
事情起于兩周前。Francis在dos.zone上開了一局《雷神之錘3》多人對戰。這個網站能在瀏覽器里直接運行老游戲,玩家不少,他玩得很上頭。
上頭的結果是:想搞懂瀏覽器多人游戲怎么實現的,然后自己做一個。
想法有了,執行還沒開始,技術調研先把他拍在沙灘上。
瀏覽器聯機的兩難:要么中心化,要么搞不定
Francis發現瀏覽器里做多人聯機,本質上只有兩個選擇,兩個都有坑。
第一個選擇是P2P直連。玩家直接連到彼此,不經過中央服務器傳數據。聽起來很理想,但有個硬門檻:你得知道對方的公網IP地址和端口。
互聯網不是電話簿,你不能"指一下"就找到人。需要一個"信令服務器"(signaling server)先告訴兩邊"對方存在",把IP和端口交換完,直連才能建立。
Francis的原話很直白:「這本質上跟中央服務器沒區別,只是只用一次來建連接,不傳數據。」
第二個坑更隱蔽。就算你有信令服務器換了IP,大部分人的電腦躲在路由器后面,用的是私有IP。外網請求打到路由器,路由器不認識,直接拒絕。
解決方法是NAT穿透,比如STUN協議。Francis的評價是:「聽起來很瘋狂,但沒有這個,路由器就會直接拒絕另一個玩家的請求,因為它不知道該怎么處理。」
一個"天才"想法:用種子追蹤器當信令服務器
既然信令服務器是必需的,能不能不用專門搭?Francis想到BitTorrent的種子追蹤器(torrent tracker)。
邏輯是這樣的:種子下載時,追蹤器本來就會記錄每個節點的IP和端口——這正是建立P2P連接需要的信息。如果能用這個機制來發現游戲玩家,就不需要自己維護信令服務器了。
想法"很天才",執行很殘酷。
瀏覽器環境把這路堵死了。BitTorrent協議在瀏覽器里跑不起來,或者說需要極其曲折的變通方案。Francis的原話:「這在瀏覽器里行不通!!!或者說有變通辦法,但我腦子里的內存不夠用了。」
調研到此結束。游戲還沒開始寫,熱情先耗盡。
為什么這件事值得技術人看一眼
Francis的挫敗感指向一個被忽視的事實:瀏覽器游戲的"免安裝、點開即玩"體驗,背后是把網絡復雜度強行塞進JavaScript運行時。原生游戲可以用操作系統底層的網絡能力,瀏覽器游戲被WebRTC的Sandbox(沙箱)規則鎖死。
他嘗試用種子追蹤器繞過限制,本質是找一個已經存在的、去中心化的節點發現機制。這個思路在游戲領域罕見,但在IPFS(星際文件系統)等分布式協議里是常規操作。瀏覽器不支持,不是技術不可行,是安全模型不允許。
數據收束:一個開發者從"想做個游戲"到"放棄",中間只隔了——一次WebRTC文檔閱讀,一次NAT穿透研究,一次BitTorrent協議調研。零行游戲代碼,全程網絡基礎設施考古。瀏覽器游戲的門檻,不在游戲設計,在如何把1990年代的網絡協議塞進2020年代的安全沙箱。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.