jjzjj

java - 未调用 Netty 处理程序

我正在尝试使用一个简单的服务器-客户端应用程序(代码见下文)进入Netty。我正在努力解决两个问题:ConfigServerHandler响应。ConfigClientHandler被正确调用。但是FeedbackServerHandler响应。永远不会调用FeedbackClientHandler。为什么?根据文档,处理程序应该一个接一个地调用。我想要多个处理程序。这些处理程序中的每一个只对另一方发送的某些消息感兴趣(例如,客户端发送,服务器接收)。我应该在处理程序(channelRead)接收到消息后对其进行过滤吗?如何区分不同的字符串?对于不同的对象,通过解析它们应该很容易。是否

java - netty如何确定读取何时完成?

下面是回显服务器的ChannelHandler。Netty框架将调用channelReadComplete()方法来通知处理程序,对channelRead()的最后一次调用是当前批处理中的最后一条消息。我的问题是,由于数据是在中继线上传输的,Netty如何知道一批消息何时完成? 最佳答案 channelReadComplete()一旦没有更多数据可从底层传输读取,就会被触发。在谈论SocketChannels时,这将是以下两种情况之一:read(...)返回0read(...)得到一个传递给它的缓冲区,该缓冲区有1024个字节要填充

java - 如何最好地指定用于 Netty 的 Protobuf(最好使用内置的 protobuf 支持)

我在protocolbuffers中指定了一个协议(protocol).传输层正在利用Netty的ProtocolBuffer支持-Netty的ProtobufDecoder的重要性接受一种且仅一种MessageLite类型.现在,我想沿着这个channel发送各种不同的消息类型,每个子类型都有与之关联的结构化信息。Protocol-buffers没有继承机制,所以我使用了一种组合。我不确定我的处理方式是否正确。我的方法是使用枚举对我的不同事件进行分类,并使用可选成员封装它们的差异。请参阅下面我的.proto,为了清楚起见,我对其进行了简化。我的问题是接收代码需要在EventType.

java - 每个连接的 Netty 处理程序都是唯一的吗?

我一直在查看Nettywebsite中的代理服务器示例:示例源代码处理程序有一个volatile变量privatevolatileChanneloutboundChannel;负责连接到另一台代理服务器的channel。这让我想知道这是否是为代理实现多个连接的正确且安全的方法。我想允许多个连接(入站)连接到不同的出站,同时确保每个入站连接都唯一链接到出站channel。据我所知,Netty会为每个连接生成一个新的管道。这是否意味着管道工厂新生成的处理程序专门用于新连接(channel)?附注如果我有1,000个Activity连接到我的Netty服务器,这是否意味着有1,000个不同的

java - 写入客户端 channel 时出现异常 java.nio.channels.ClosedChannelException

我使用netty3.5.8创建了一个游戏服务器。起初,从服务器向客户端发送数据没有任何问题。但是当服务器运行一段时间后,向客户端channel写入数据时出现很多异常[java.nio.channels.ClosedChannelException]。以前任何人都得到过这个异常。有什么技巧可以解决这个问题吗?我考虑缓存缓冲区的原因。我的代码示例是这样的:ChannelBufferbff=ChannelBuffers.buffer(18);bff.writeByte(Events.S_SERVER_PUSH);bff.writeByte((byte)0);bff.writeInt(idRo

java - Netty IdleStateHandler 的问题——我是不是以错误的方式测试它?

我有一个玩具Netty服务器,当他们的channel没有发生任何事情时,我正试图向他们发送心跳消息。我正在通过telnet到服务器进行测试,写一条消息然后不发送任何东西,但我没有听到任何心跳!控制台:>>telnetlocalhost6969Trying127.0.0.1...Connectedtolocalhost.Escapecharacteris'^]'.>>fooDidyousay'foo'?MyPipelineFactory.javapublicclassMyPipelineFactoryimplementsChannelPipelineFactory{privatefina

java - Netty 增加 ChannelBuffer 大小

你好,我有一个Netty服务器,它有一个应该接受字符串的处理程序。它似乎只能接收最多1024字节的内容。我怎样才能增加缓冲区大小。我已经试过了bootstrap.setOption("child.sendBufferSize",1048576);bootstrap.setOption("child.receiveBufferSize",1048576);没有成功。处理程序如下publicclassTestHandlerextendsSimpleChannelHandler{@OverridepublicvoidmessageReceived(ChannelHandlerContextc

java - 如何在 Java 中解码 http POST 数据?

我正在使用Netty,我必须接受并解析httpPOST请求。据我所知,Netty没有对POST的内置支持,只有GET。(这是一个处理原始网络操作的相当低级的库。使用开箱即用的servlet容器不是一种选择。)如果我将POST请求的内容作为字节数组,将其解析为参数映射的最快且最无错误的方法是什么?我可以自己写这个,但是必须有一些内置到JDK中的方法可以使这更容易。我敢打赌有一些陷阱和极端情况需要处理。 最佳答案 Netty有一个高级的POST请求解码器(HttpPostRequestDecoder)可以解码Http属性,使用分块编码的

java - 如何使用 Java netty 正确限制带宽使用?

对于我使用nettynio库用Java开发的下载客户端,我还实现了带宽限制功能。从技术上讲,我是通过GlobalTrafficShapingHandler对象来实现的。基于此类的JavaDoc,我按如下方式初始化nio客户端管道:...trafficHandler=newGlobalTrafficShapingHandler(newHashedWheelTimer(),0,0,1000);execHandler=newExecutionHandler(newOrderedMemoryAwareThreadPoolExecutor(20,0,0));...publicChannelPip

java - Netty EventExecutorGroup 中断管道

情况:我有一个使用Netty4.0.17.Final的代理应用程序(仅供引用:我已经遇到了版本4.0.13.Final和4.0.9.Final的问题),那就是基于proxyfromtheNettyexamples.我的代码和示例之间的主要区别在于,当channel激活时,我的代码不会连接到后端服务器,而是仅在第一次读取时才连接,因为此读取必须首先对输入进行一些检查,然后才能连接和将该消息转发到后端服务器。我对我的应用进行了数小时的单元测试和负载测试,它运行良好。问题:由于收到的第一条消息需要执行一些阻塞操作,因此我尝试为执行此操作的处理程序使用单独的EventExecutorGroup