这是关于最新的巨人宝石(https://github.com/maccman/juggernaut)
我在考虑架构,比如说,‘点游戏’。这个元游戏非常简单:每个登录的用户(根据Juggernaut,订阅了频道)都是JS画布上的一个随机颜色的点。用户可以向任何方向移动他的点。就这样。
Juggernaut应该为连接的客户端传输和推送所有数据。
目前,我将架构想象为:
1)客户端将点的坐标和玩家的id ([1,10,299])作为ajax推送到Rails。
2) Rails将此数据推送到Juggernaut
3) Juggernaut将坐标推送回所有监听此通道的客户端。
Juggernaut.publish("coordinates_channel", [1, [10,299]])问题:
1)当我需要在js canvas上逐像素移动'dot‘对象时,我需要发送太多的AJAX请求。例如,如果我的点每秒移动20个像素,我需要每秒发送20个请求。不能接受。
2)是否应该(例如使用EventMachine )将Juggernaut.publish包装到异步循环中?因为,想象一下1000个客户端(1000个点,以及不断更新坐标的数据流)……
或者也许我在使用Juggernaut gem时搞错了客户端-服务器?你对这个实现有什么看法?
谢谢。
发布于 2012-01-14 21:28:34
WebSockets/长轮询/其他comet技术具有低延迟,您的游戏将会滞后。我见过通过websockets实现的实时游戏,它们要么滞后,要么游戏机制是特定的,比如让玩家移动得非常慢,以解决低延迟问题。经典的AJAX是绝对不可能的。
这里有一些关于改进延迟的参考资料
Valve Source Multiplayer Networking
Unreal Source Multiplayer Networking
https://stackoverflow.com/questions/8862381
复制相似问题