一个开发者刚决定重返游戏开发,就被网络技术劝退了。他没写一行游戏代码,先被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年代的安全沙箱。
热门跟贴