【发布时间】:2013-01-23 23:04:32
【问题描述】:
我目前正在尝试开发一个与 node.js 服务器对话的简单 Flash 游戏。
我的问题是: 我应该如何制作一个能够区分网络请求和游戏请求的服务器?
以下是我所做的详细信息:
之前,我使用net 和static 模块分别处理来自游戏客户端和浏览器的请求。
TwoServers.js
// Web server
var file = new staticModule.Server('./public');
http.createServer(function(req, res){
req.addListener('end', function(){
file.serve(req, res, function(err, result){
// do something
});
});
}).listen(port1, "127.0.0.1");
// Game Server
var server = net.createServer(function(socket)
{
// handle messages to/from Flash client
socket.setEncoding('utf8');
socket.write('foo');
socket.on('data', onMessageReceived);
});
server.listen(port2, "127.0.0.1");
我想只用一个Express 服务器在单个端口上监听,但我不知道该怎么做。
这就是我认为它可能看起来的样子(实际上不起作用):
OneServer.js
var app = express();
app.configure(function()
{
// ...
app.use('/',express.static(path.join(__dirname, 'public'))); // The static server
});
app.get('/', function(req, res) // This is incorrect (expects http requests)
{
// Handle messages to/from Flash client
var socket = req.connection;
socket.setEncoding('utf8');
socket.write('foo');
socket.on('data', onMessageReceived);
});
app.listen(app.get('port')); // Listen in on a single port
但我希望能够区分网页请求和游戏请求。
注意:Actionscript 的 XMLSocket 发出 TCP 请求,因此使用 app.get('/') 不正确,原因有两个:
当 Flash 写入套接字时,它没有使用 http 协议,因此当游戏尝试连接时不会触发 app.get('/')。
由于我无权更正net.Socket 对象,我不能期望从/向正确的套接字读取或写入。相反,我将读取/写入与网页请求关联的套接字。
对此的任何帮助将不胜感激(特别是如果我以错误的方式推理)。
【问题讨论】:
标签: actionscript-3 node.js sockets express