iisnode を使用して node-express アプリケーションを機能させるのに問題があります。私はiisで簡単なhttp pub/subサーバーをセットアップしています。これは POST 経由でメッセージを受信し、データを関連するリスニング クライアントにプッシュします。コード...
サーバ
var express = require('express');
var app = require('express').createServer();
var clients = {};
app.configure(function(){
app.use(express.bodyParser());
app.use(express.methodOverride());
});
app.get('/pubsubleads/leads/:id', function(request, response) {
var id = request.params.id.toString();
response.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
clients[id] = response;
request.on('close', function(){
console.log('connection closing');
delete clients[id];
});
});
app.post('/pubsubleads/leads', function(request, response){
console.log('New post');
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end();
var id = request.body.id;
if(clients[id] != null) {
console.log('id = ' + id);
console.log('data = ' + request.body.data);
clients[id].write('id: ' + request.body.id + '\n');
clients[id].write('data: ' + request.body.data + '\n\n');
}
});
app.listen(process.env.PORT);
console.log('Server started on port ' + process.env.PORT);
クライアント
var source = new EventSource('/pubsub/data/@Session.SessionID');
source.onopen = function (e) {
alert('onopen');
document.body.innerHTML += 'Connected <br>';
};
source.onmessage = function (e) {
alert('onmessage: ' + e.data);
document.body.innerHTML += e.data + '<br/>';
};
source.onerror = function (e) {
if (e.readyState == EventSource.CLOSED) {
alert('closed');
}
};
...ここで、EventSource url に渡されるパラメーターは、このクライアントを一意に識別するものです。
サーバーとクライアントは、同じルート ドメインの下の別のサブドメインでホストされます。サーバーがメッセージを正しく受信していることを確認しました。私が抱えている問題は、クライアント イベント ハンドラーがヒットしないことです。クライアント コードを でラップしようとしました$(document).ready()
が、影響はありませんでした。スタンドアロン ノード プロセスを使用して、IIS の外部でセットアップをレプリケートしましたが、正しく動作します。
Windows 7 64ビットでChrome 18、nodejs 0.6.18、iisnode、IIS 7.5を使用しています。
私はアイデアを失ったばかりで、オンラインで議論されている同様の問題を見つけることができませんでした. どんな助けでも大歓迎です。