現在、node.js サーバーと通信する単純な Flash ゲームを開発しようとしています。
私の質問は次のとおりです: Web リクエストとゲーム リクエストを区別するサーバーを作成するにはどうすればよいですか?
ここに私がやったことの詳細があります:
以前は、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");
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
しかし、Web ページのリクエストとゲームからのリクエストを区別できるようにしたいと考えています。
注: Actionscript のXMLSocketは TCP リクエストを行うため、app.get('/') の使用は次の 2 つの理由から正しくありません。
Flash がソケットに書き込むとき、http プロトコルを使用していないため、ゲームが接続を試みても app.get('/') は起動されません。
net.Socketオブジェクトを修正するためのアクセス権がないため、正しいソケットとの間で読み書きを行うことは期待できません。代わりに、Web ページの要求に関連付けられたソケットに対して読み取り/書き込みを行います。
これについての助けをいただければ幸いです(特に、これについて間違った方法で推論している場合)。