在Heroku上使用node.js的Pusher/PubNub替代方案



我想使用node.js构建我自己的多人游戏服务器,并将代码部署在Heroku上。我的问题是,如果我描述的是可能的:)

我希望Android游戏的玩家能够连接到非常快速(不一定是实时)的游戏服务器。游戏服务器应该能够将他们分组到房间(频道)中,当他们在房间中时,他们应该能够发布和订阅。这意味着,我希望玩家通过node.js服务器交换游戏信息。

在服务器上,带有wsnode.js应用于让WebSocket服务器侦听客户端事件,如下所示:

var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ port: 8080 });
var clientList = {};
wss.on('connection', function(ws) {
    ws['AUTH'] = getGUID();
    clientList[ws['AUTH']] = ws; // ws['AUTH'] has joined the server
    ws.on('message', function(message) {
        for (var clientID in clientList) {
            clientList[clientID].send(message);
        }
    });
    ws.on('close', function() {
        delete clientList[ws['AUTH']]; // ws['AUTH'] has left the server
    }
    ws.send('something');
});
function getGUID() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
        return v.toString(16);
    });   
}

在客户端,我想使用高速公路.ws(哪个部分?WAMP?PubSub还是RPC?)与此游戏服务器通信。

如果这有效的话,这就是Pusher和PubNub等服务的非常基本的版本的几行,对吧?必须添加通道、身份验证等

如果这在上面的代码中是可能的,那么它在Heroku上也能工作吗?

  1. 拥有多个dynos怎么样?它们共享公共内存(clientList)还是我必须在它们之间同步?怎样使用集群API
  2. 大致希望在单个dyno上工作的客户数量是多少?每个dyno 100个并发用户的期望值是否过高

如果您想使用WAMP(通过一个Autobahn库或其他库),那么您可以查看WAMP.io-一个nodejs WAMP实现。

相关内容

  • 没有找到相关文章

最新更新