我正在通過套接字從FF附加套件寫入到java服務器。我寫了幾個請求,服務器似乎一個接一個地處理它們。相比之下,來自服務器的響應是同時處理的。如何在我的代碼中刷新套接字
我試着衝在服務器中的出流,但它什麼都不做。我不明白髮生了什麼事。
我感謝所有幫助,謝謝。
EDIT1:可能是附加(客戶端)不刷新輸入流,這可能嗎?我在java服務器中使用out.println,因此'\ n'必須刷新其輸出流,並且網絡庫使用write.flush(),但是我沒有看到任何其他刷新輸入。
EDIT2:這裏是我的代碼:
exports.main = function() {
try {
// At first, we need a nsISocketTransportService
var transportService =
Cc["@mozilla.org/network/socket-transport-service;1"]
.getService(Ci.nsISocketTransportService);
// Try to connect to localhost:2222
var transport = transportService.createTransport(null, 0, "localhost", 6666, null);
var stream = transport.openInputStream(Ci.nsITransport.OPEN_UNBUFFERED,null,null);
var instream = Cc["@mozilla.org/scriptableinputstream;1"]
.createInstance(Ci.nsIScriptableInputStream);
// Initialize
instream.init(stream);
var outstream = transport.openOutputStream(0, 0, 0);
var dataListener = {
onStartRequest: function(request, context){},
onStopRequest: function(request, context, status){
instream.close();
outstream.close();
},
onDataAvailable: function(request, context, inputStream, offset, count) {
var data = instream.read(count);
console.log(data);
},
};
var pump = Cc["@mozilla.org/network/input-stream-pump;1"]
.createInstance(Ci.nsIInputStreamPump);
pump.init(stream, -1, -1, 0, 0, false);
pump.asyncRead(dataListener, null);
// Write data
console.log("hi1");
var outputData = "hi1\n";
outstream.write(outputData, outputData.length);
// Write data
console.log("hi2");
var outputData = "hi2\n";
outstream.write(outputData, outputData.length);
} catch (e){
console.log("Error" + e.result + ": " + e.message);
return e;
} return null;
};
所以,當我運行它,我得到:
Client > hi1
Client > hi2
Server > bye1
Server > bye2
它應該是:
Client > hi1
Server > bye1
Client > hi2
Server > bye2
沒有代碼,沒有幫助。 – 2012-04-25 15:21:41
@MarkoTopolnik:如果你想看看,我添加了一些代碼。 – synack 2012-04-25 16:09:58
您將此標記爲Java,但我沒有看到您的問題與Java的任何關係。如果你沒有標記它,我們就不會有這個對話。我不是JavaScript專家。 – 2012-04-25 16:34:09