首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netty Beta1上的怪异行为

Netty Beta1上的怪异行为
EN

Stack Overflow用户
提问于 2013-02-18 11:03:43
回答 1查看 174关注 0票数 0

以前,我们使用Netty4.0.0.Alpha7开发我们的Websocket应用程序,一切都很好。一旦Netty 4.0.0.Beta 1发布,我们就将它们合并到应用程序中。但是,没有任何客户端能够连接到应用程序。最初,我认为这是我们的问题,所以我们从github获得了websocket示例,而且它也不起作用。

奇怪的是,当我们在本地机器上运行时,我们的应用程序和示例可以正常工作,但是,一旦部署到服务器上,它就不能工作了。当我们回滚到同一台服务器上的Netty Alpha7时,它再次正常工作。有人遇到过这样的问题吗?

下面是在我们的服务器(Linux)中运行Websocket示例时发现的异常。在本地机器(Windows7)上运行时找不到此异常。

代码语言:javascript
复制
io.netty.channel.ChannelPipelineException: io.netty.buffer.IllegalBufferAccessException
    at io.netty.channel.DefaultChannelPipeline.notifyHandlerException(DefaultChannelPipeline.java:1019)
    at io.netty.channel.DefaultChannelHandlerContext.freeHandlerBuffersAfterRemoval(DefaultChannelHandlerContext.java:360)
    at io.netty.channel.DefaultChannelHandlerContext.invokeInboundBufferUpdated(DefaultChannelHandlerContext.java:962)
    at io.netty.channel.DefaultChannelHandlerContext.fireInboundBufferUpdated0(DefaultChannelHandlerContext.java:926)
    at io.netty.channel.DefaultChannelHandlerContext.fireInboundBufferUpdated(DefaultChannelHandlerContext.java:904)
    at io.netty.channel.DefaultChannelPipeline.fireInboundBufferUpdated(DefaultChannelPipeline.java:909)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:115)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:401)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:365)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:302)
    at io.netty.channel.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:110)
    at java.lang.Thread.run(Thread.java:619)
Caused by: io.netty.buffer.IllegalBufferAccessException
    at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:81)
    at io.netty.channel.ChannelInboundByteHandlerAdapter.freeInboundBuffer(ChannelInboundByteHandlerAdapter.java:46)
    at io.netty.channel.DefaultChannelHandlerContext.freeHandlerBuffersAfterRemoval(DefaultChannelHandlerContext.java:358)
    ... 10 more
io.netty.channel.ChannelPipelineException: io.netty.buffer.IllegalBufferAccessException
    at io.netty.channel.DefaultChannelPipeline.notifyHandlerException(DefaultChannelPipeline.java:1019)
    at io.netty.channel.DefaultChannelHandlerContext.freeHandlerBuffersAfterRemoval(DefaultChannelHandlerContext.java:360)
    at io.netty.channel.DefaultChannelHandlerContext.invokeChannelInactive(DefaultChannelHandlerContext.java:823)
    at io.netty.channel.DefaultChannelHandlerContext.access$1300(DefaultChannelHandlerContext.java:38)
    at io.netty.channel.DefaultChannelHandlerContext$5.run(DefaultChannelHandlerContext.java:808)
    at io.netty.channel.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:259)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:305)
    at io.netty.channel.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:110)
    at java.lang.Thread.run(Thread.java:619)
Caused by: io.netty.buffer.IllegalBufferAccessException
    at io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:81)
    at io.netty.channel.ChannelInboundByteHandlerAdapter.freeInboundBuffer(ChannelInboundByteHandlerAdapter.java:46)
    at io.netty.channel.DefaultChannelHandlerContext.freeHandlerBuffersAfterRemoval(DefaultChannelHandlerContext.java:358)
    ... 7 more

更新,这似乎是java版本的一个问题。最初,java版本是6u17,应用程序不能工作。在我将其更新到6u38之后,应用程序运行良好。

EN

回答 1

Stack Overflow用户

发布于 2013-02-19 09:28:53

好的,我想在从ChannelHandler中删除ChannelPipeline之后,尝试访问缓冲区。这是不允许的,因为Beta1确保我们在删除时不会泄漏任何内存。如果要删除ChannelHandler并将缓冲区中的剩余内容转发到ChannelPipeline中的下一个ChannelHandler,请使用ChannelPipeline.removeAndForward(..)。

另见:https://github.com/netty/netty/issues/1054#issuecomment-13760528

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14934773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档