2016-09-10 6 views
0

私はPrefixedStringCodecFactoryを使用する次のようなMENAサーバーを持っています。ノードJSソケットクライアントからMINAソケットサーバーにメッセージを送信

IoAcceptor acceptor = new NioSocketAcceptor(); 

acceptor.getFilterChain().addLast("logger", new LoggingFilter()); 
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new PrefixedStringCodecFactory(Charset.forName("UTF-8")))); 

acceptor.setHandler(new MinaServerHandler()); 
acceptor.getSessionConfig().setReadBufferSize(2048); 
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); 
acceptor.bind(new InetSocketAddress(PORT)); 

このサーバーに接続してメッセージを書き込むノードクライアントは次のようになります。

var net = require('net'); 
var HOST = '127.0.0.1'; 
var PORT = 9998; 
var client = new net.Socket(); 
var intervalHandler = null; 
client.connect(PORT, HOST, function(){ 
    console.log('CONNECTED TO: ' + HOST + ':' + PORT); 
    var payload = "{\"message\": \"Hello\"}"; 
    client.write(payload); 
}); 

この結果、MINAサーバーでは次の例外が発生します。

org.apache.mina.filter.codec.ProtocolDecoderException: org.apache.mina.core.buffer.BufferDataException: dataLength: 2065854578 (Hexdump: 7B 22 70 72 6F 63 65 73 73 49 64 22 3A 20 30 2C 20 22 63 6F 6D 6D 61 6E 64 22 3A 20 22 41 4C 49 56 45 22 2C 20 22 50 72 6F 63 65 73 73 4E 61 6D 65 22 3A 20 22 4B 75 62 65 41 70 70 73 22 7D) 
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:242) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) 
at org.apache.mina.filter.logging.LoggingFilter.messageReceived(LoggingFilter.java:208) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:47) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:765) 
at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:109) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:417) 
at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:410) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:710) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:664) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:653) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$600(AbstractPollingIoProcessor.java:67) 
at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:1124) 
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

私もlength-prefixed-messageモジュールが、運を使用してみました。

ノードクライアントから正しい形式でメッセージを送信する方法についての助けがあれば助かります。

答えて

0

frame-streamを使用して問題を解決しました。

var net = require('net'); 
var frame = require('frame-stream') 
var HOST = '127.0.0.1'; 
var PORT = 9998; 
var client = new net.Socket(); 
var socket = client.connect(PORT, HOST, function(){ 
    var payload = "{\"status\": 0}"; 
    var message = new Buffer(payload); 
    var encode = frame.encode(); 
    encode.pipe(socket) 
     .pipe(frame()); 

    encode.write(message); 
}); 
+0

thxを共有します。私はどのようにminaサーバーの応答データを取得するのだろうか? –

+0

これはソケット接続なので、クライアントからイベントを登録してそれを聞くことができます。 – Raathigesh

+0

thx。すぐにnet.Socket apiを試してみました。 –

関連する問題