我在使用iisnode獲取使用iisnode的節點快速應用程序時遇到了一些困難。我在iis中有一個簡單的http pub/sub服務器設置。這通過POST接收消息,並將數據推送到相關的監聽客戶端。代碼...使用iisnode運行節點快速服務器 - EventSource處理程序未啓動
服務器
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的網址是什麼,唯一標識此客戶端。
服務器和客戶端位於同一根域下的單獨子域中。我已確認服務器正在正確接收郵件。我遇到的問題是客戶端事件處理程序從未被擊中。我曾嘗試在$(document).ready()
中包裝客戶端代碼,但這沒有任何影響。我已經使用獨立的節點進程複製了IIS之外的設置,並且正常工作。
我在Windows 7 64位上全部使用Chrome 18,nodejs 0.6.18,iisnode,IIS 7.5。
我剛剛從創意中脫穎而出,一直未能找到任何類似的在線討論問題。任何幫助,將不勝感激。
非常好。 flushResponse = true是答案。非常感謝你。 –