ソケットを介して FF アドオンから Java サーバーに書き込みを行っています。いくつかのリクエストを書きますが、サーバーはそれらを 1 つずつ処理しているようです。対照的に、サーバーからの応答はすべて同時に処理されます。
サーバーで出力ストリームをフラッシュしようとしましたが、何もしません。何が起こっているのかわかりません。
助けていただければ幸いです、ありがとう。
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