我想使用node.js构建我自己的多人游戏服务器,并将代码部署在Heroku上。我的问题是,如果我描述的是可能的:)
我希望Android游戏的玩家能够连接到非常快速(不一定是实时)的游戏服务器。游戏服务器应该能够将他们分组到房间(频道)中,当他们在房间中时,他们应该能够发布和订阅。这意味着,我希望玩家通过node.js服务器交换游戏信息。
在服务器上,带有ws的node.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上也能工作吗?
- 拥有多个dynos怎么样?它们共享公共内存(
clientList
)还是我必须在它们之间同步?怎样使用集群API - 您大致希望在单个dyno上工作的客户数量是多少?每个dyno 100个并发用户的期望值是否过高
如果您想使用WAMP(通过一个Autobahn库或其他库),那么您可以查看WAMP.io-一个nodejs WAMP实现。