2015-03-08 30 views
0

我有以下情況,即已經發送了頭的問題發生,通過AJAX從服務器發送多個請求時,客戶端: app structure交換數據

這是我因爲我選擇使用AJAX而不是套接字。是否有其他的方式來交換服務器和客戶端之間的數據,比如使用browserify來爲客戶端翻譯發射器腳本?我想我不能逃脫套接字,所以我會採取關於更簡單的庫的建議,因爲sockets.io似乎對於這麼小的操作來說太複雜了。 // ------------------------- 更新: 這是請求的node.js代碼。

var maxRunning = 1; 
    var test_de_rf = ['rennen','ausgehen']; 

function callHandler(word, cb) { 
    console.log("word is - " + word); 
    gender.gender_function_rf(word , function (result_rf) { 
     console.log(result_rf); 
     res.send(result_rf);// Here I send data back to the ajax call 
     setTimeout(function() { cb(null); 
     }, 3000); 
    }); 
} 
async.eachLimit(test_de_rf, maxRunning, function(item, done) { 
    callHandler(item, function(err) { 
     if (err) throw new Error(err); 
     done(); 
    }); 
}, function(err) { 
    if (err) throw new Error(err); 
    console.log('done'); 
}); 
+0

我們可以看到爲您的ajax請求提供問題的node.js代碼嗎? – bluetoft 2015-03-08 21:18:57

+0

我幾乎不會說socket.io是複雜的。事實上,它簡化了一些你必須用webSocket自己做的事情。如果你想要一個可以隨時向客戶發送消息的專用連接,那麼websocket的核心就是你想要從瀏覽器到服務器的想法,而socket.io是在webSockets之上的更高層次的實現(它爲您提供一些免費的有用功能,如自動重新連接)。 – jfriend00 2015-03-08 23:35:06

回答

0

res.send()發送並完成http響應。每個請求只能調用一次,因爲請求在調用完成後完成。這是發送回覆的相當高級別的方式(在一次調用中一次全部完成)。

如果你想有促進響應一些不同的功能,你可以使用lower level functions on the http objectres.setHeader()res.writeHead()res.write()(你可以多次調用)和res.end()(表示響應的結束)。

您可以使用標準的WebSocket API在瀏覽器中得到的WebSocket模塊服務器端支持,也可以使用socket.io它提供了客戶端和服務器的支持和一些更高級功能(如自動重新連接,自動故障轉移到HTTP輪詢,如果不支持webSocket等等)。


所有這一切說,如果你真的想要的是剛剛從服務器發送一些數據到客戶端的能力,只要你想,那麼WebSocket的是真正的更好的方式去。這是一個持久連接,由所有現代瀏覽器支持,並允許服務器隨時向客戶端主動發送數據。我幾乎不會說socket.io是複雜的。該文檔在解釋事情方面並不是特別好(在開源世界中並不罕見,因爲node.js文檔也不是特別好)。但是,我一直能夠通過在調試器中查看幾個運行時數據結構和/或查看源代碼來找出高級問題。

+0

謝謝,夥計!在確認websocket是答案之後,我迅速設法解決了這個問題,這要歸功於http://stackoverflow.com/questions/9914816/what-is-an-example-of-the-simplest-possible-socket -io-示例 – 2015-03-09 13:49:44