1

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

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

在服务器上,使用带有ws的node.jsWebSocket服务器监听客户端事件,如下所示:

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);
    });   
}

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

如果这可行,那么只需几行代码就可以拥有Pusher 和 PubNub 等服务提供的非常基本的版本,对吧?必须添加通道、身份验证等。

如果上面的代码可以做到这一点,它是否也适用于 Heroku?

  1. 拥有多个测功机怎么样?它们是否共享共同的内存 ( clientList) 还是我必须在它们之间同步?如何?使用集群 API
  2. 粗略预计在单个测功机上工作的客户数量是多少?每个测功机 100 个并发用户是否期望过高?
4

1 回答 1

1

If you want to use WAMP (via one of the Autobahn libs or others) then you could check out wamp.io - a nodejs WAMP implementation.

于 2013-08-15T04:14:56.900 回答