2012-05-13 63 views
0

我只是想使用節點包「node-spdy」來試用SPDY。spdy.node.js:我只是開了'324(ERR_EMPTY_RESPONSE)

我的javascript:

編輯:現在腳本包含有關證書的信息。我從twitlog測試應用程序中拿走了他們。

var spdy = require('spdy'), 
    fs = require('fs'); 

var options = { 
    key: fs.readFileSync(__dirname + '/keys/spdy-key.pem'), 
    cert: fs.readFileSync(__dirname + '/keys/spdy-cert.pem'), 
    ca: fs.readFileSync(__dirname + '/keys/spdy-csr.pem') 
}; 

var spdy = require('spdy'); 

var server = spdy.createServer({}, function(req, res) { 
    console.log('Send response...'); 
    res.writeHead(200, { 
     "Content-Type": "text/plain" 
    }); 
    res.write("Hello World!\n"); 
    res.end(); 
    console.log('Response has been sended.'); 
}); 

server.listen(3000); 

我的問題:回調函數永遠不會執行,分別爲節點從未登錄「發送響應...」或者「響應已sended。」我剛剛得到一個空的反應,但Node.js的不會拋出exeption:

Fehler 324(淨值:: ERR_EMPTY_RESPONSE)

我的服務器端配置:我用node.js(版本0.7.6)和node-spdy(承諾eafd9c9fdd)在Windows Se7en下。

我的客戶端配置:我使用鉻版本作爲瀏覽器來測試spdy out。 在我的測試中,我不使用SSL,所以我不得不改變我的配置。這是你可以about:net-internals/#spdy下查找:

==SPDY Status== 

SPDY Enabled:    true 
Use Alternate Protocol:  false 
Force SPDY Always:   true 
Force SPDY Over SSL:  false 
Next Protocols: 

我的客戶端調試的東西:鉻調試服務about:net-internals/#tests告訴我:

Result Experiment      Error     Time (ms) 
FAIL Fetch http://localhost:3000/ 
     Don't use any proxy    EMPTY_RESPONSE (-324) 3022 

     Fetch http://localhost:3000/ 
     Use system proxy settings  ?      ? 

編輯:自從我加入證書信息,客戶端調試信息發生了一些變化。下面是最新的一個:

Result Experiment      Error     Time (ms) 
FAIL Fetch https://localhost:3000/ 
     Don't use any proxy    ABORTED (-3)   9 

FAIL Fetch https://localhost:3000/ 
     Use system proxy settings  ABORTED (-3)   300489 

FAIL Fetch https://localhost:3000/ 
     Use Firefox's proxy settings ABORTED (-3)   4 

FAIL Fetch https://localhost:3000/ 
     Use system proxy settings  ABORTED (-3)   300438 

我的服務器端的調試東西:這就是內置的節點調試器告訴我,當我收到一個請求:

編輯:的服務器 - 即使我將證書信息添加到腳本,側面調試的東西也不會改變。

debug>n 
break in net.js:865 
863 
864 function onconnection(clientHandle) { 
865 var handle = this; 
866 var self = handle.socket; 
867 
debug> 
break in net.js:866 
864 function onconnection(clientHandle) { 
865 var handle = this; 
866 var self = handle.socket; 
867 
868 debug('onconnection'); 
debug> 
break in net.js:868 
866 var self = handle.socket; 
867 
868 debug('onconnection'); 
869 
870 if (!clientHandle) { 
debug> 
break in net.js:870 
868 debug('onconnection'); 
869 
870 if (!clientHandle) { 
871  self.emit('error', errnoException(errno, 'accept')); 
872  return; 
debug> 
break in net.js:875 
873 } 
874 
875 if (self.maxConnections && self.connections >= self.maxConnections) { 
876  clientHandle.close(); 
877  return; 
debug> 
break in net.js:880 
878 } 
879 
880 var socket = new Socket({ 
881  handle: clientHandle, 
882  allowHalfOpen: self.allowHalfOpen 
debug> 
break in net.js:884 
882  allowHalfOpen: self.allowHalfOpen 
883 }); 
884 socket.readable = socket.writable = true; 
885 
886 socket.resume(); 
debug> 
break in net.js:886 
884 socket.readable = socket.writable = true; 
885 
886 socket.resume(); 
887 
888 self.connections++; 
debug> 
break in net.js:888 
886 socket.resume(); 
887 
888 self.connections++; 
889 socket.server = self; 
890 
debug> 
break in net.js:889 
887 
888 self.connections++; 
889 socket.server = self; 
890 
891 ; 
debug> 
break in net.js:892 
890 
891 ; 
892 self.emit('connection', socket); 
893 socket.emit('connect'); 
894 } 
debug> 
break in net.js:893 
891 ; 
892 self.emit('connection', socket); 
893 socket.emit('connect'); 
894 } 
895 
debug> 
break in net.js:894 
892 self.emit('connection', socket); 
893 socket.emit('connect'); 
894 } 
895 
896 
debug> 

我的問題:我只是想回到一個簡單的文本消息,使用SPDY客戶端。我如何使用node.js來做到這一點? - 如果你需要更多的細節,請告訴我。感謝您的回答。

+0

我想我只是讀了一些有趣的[評論](http://japhr.blogspot.com/2012/04/edge-spdy-nodejs-and-expressjs.html?showComment=1335207922979#c4966358242271584919)寫的Storm:'不可能在沒有SSL的情況下運行node-spdy。'我會試着找出更多關於這個的信息,或者是否有人知道這個事實? – fridojet

+0

現在我使用SSL與示例應用程序的證書。但仍然存在相同的問題。 – fridojet

回答

0

重新打開SSL。沒有它,SPDY將無法正常工作。

+0

SPDY白皮書告訴我:「結果顯示,在普通TCP(無SSL)的情況下,頁面加載時間超過HTTP的速度提高了27% - 60%,而SSL則提高了39% - 55%。」這意味着,普通的TCP也有可能,不是嗎? – fridojet

+0

SPDY不需* TLS/SSL。有關更詳細的解釋,請參閱http://stackoverflow.com/questions/6304217/spdy-without-tls/7628644#7628644。 –

+0

Webbrowsers不會允許您在沒有SSL的情況下使用SPDY,除非您明確強制它們。允許開發人員關閉SSL只是爲了通過Wireshark等工具更容易調試。另外,@fridojet,您引用的部分將SPDY與「舊」http://和https://進行比較。 –

1

ERR_EMPTY_RESPONSE表示Chromium能夠連接到套接字,但收到空響應。很有可能,這指向服務器配置問題,尤其是因爲回調從不被調用。克里斯Strom(節點spdy作者)可能會很樂意幫助你在這裏。

+0

這就是我的想法。我知道Chris Strom,但我不想給他寫郵件,因爲我不想通過個人幫助請求來糾纏他。或者他可以親自問一下嗎?或者有另一種方式與他很好地聯繫? – fridojet

相關問題