1

入力としてテキストを受け取り、出力として画像を返すNettyベースのhttpサーバーを作成しようとしています。この画像は、入力テキストに基づいてオンザフライで生成されます。

org.jboss.netty.example.http.file.HttpStaticFileServerHandlerのロジックを自分のハンドラーにコピーし、チャネルの出力としてDefaultFileRegionを書き込むのではなく、

final FileRegion region = new DefaultFileRegion(raf.getChannel(), 0, fileLength);
writeFuture = ch.write(region);

私は自分のハンドラーで次のことを行っています。

InputStream imageIOStream = imageGenerator.generateImage(inputText);
ChannelFuture writeFuture = ch.write(new ChunkedStream(imageIOStream));

しかし、クライアントに書き戻そうとすると、サーバーで次の例外が発生します。

java.lang.IllegalArgumentException: unsupported message type: class     org.jboss.netty.handler.stream.ChunkedStream
at    org.jboss.netty.channel.socket.nio.SocketSendBufferPool.acquire(SocketSendBufferPool.java:56)
at org.jboss.netty.channel.socket.nio.NioWorker.write0(NioWorker.java:463)
at  org.jboss.netty.channel.socket.nio.NioWorker.writeFromUserCode(NioWorker.java:390)
at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.handleAcceptedSocket(NioServerSocketPipelineSink.java:137)
at org.jboss.netty.channel.socket.nio.NioServerSocketPipelineSink.eventSunk(NioServerSocketPipelineSink.java:76)
at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:68)
at org.jboss.netty.channel.Channels.write(Channels.java:611)
at org.jboss.netty.channel.Channels.write(Channels.java:578)
at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:251)

誰か助けてくれませんか。

4

1 に答える 1

3

パイプラインで、次の設定を行いましたか?

pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());

https://github.com/netty/netty/blob/master/example/src/main/java/io/netty/example/http/file/HttpStaticFileServerPipelineFactory.javaを参照してください。

于 2012-04-08T23:06:09.823 に答える