Netty服务器端是否有侦听器,当客户端意外关闭时(例如,当客户端m/c中的LAN电缆被移除时),将通知侦听器。未调用DefaultChannelHandler中的任何方法。假设在拔下LAN电缆时,客户端处于非活动状态(不发送/接收任何数据)
或者我们必须在服务器端实现一个保持活动的监视器来检查通道是否有效?实际上,没有办法检测TCP/IP中意外断开的连接。如果有办法做到这一点,则不应称之为“意外”。:-)
检测断开连接最可靠的方法是定期发送消息或等待超时消息,例如发送ping消息
要实现此行为
背景:
我正在设计一个联邦/分布式解决方案的原型,该解决方案将使用Netty作为通信基础设施
我知道我必须围绕Netty创建一些功能来实现我们需要的功能,但我想了解Netty提供了什么,这样我就不会再发明轮子了
目标:
我需要提供一个通用通信调度层,该层将根据与之通信的目标端点自动选择适当的通信信道
如果目标是本地的,我们希望在vm中通信。如果是远程的,我们计划在WebSocket上使用我们自己的二进制格式。我们将知道它是本地的还是远程的,因此需要创建/选择正确的频道
我希望每个服务器实例都有某
我注意到,如果AUTO_READ设置为false,GlobalChannel TrafficShapingHandler将不会限制流量。但是从这个帖子的评论中,诺曼提到AUTO_READ false被设置为防止OOME。我想人们可以理解为什么控制网络会填满缓冲区并导致OOME
当我们启用流量整形时,有没有办法解决这种情况,或者只是一种折衷
关于当自动读取为false时,写入限制正常,读取限制工作不正常。
如果您正在开发代理服务器,可以将GlobalChannel TrafficShapingHa
我正在寻找一个服务器示例,它可以将端口80上的http处理程序和同一jar中另一个端口上的protobuf处理程序结合起来。
谢谢 我不知道你到底在找什么。这只是创建两个不同的ServerBootstrap实例,对它们进行配置并调用bind(..)就这样。从我的角度来看,创建不同的ServerBootstrap不是完全正确的方法,因为它会导致创建未使用的实体、处理程序、双重初始化、它们之间可能的不一致、EventLoopGroup共享或克隆,等等
好的替代方法是在一个引导服务器中为所有必需的端口
我正在尝试编写一个类,它每分钟向一个通道注入一条消息。我已经知道如何使用下面的代码来实现这一点,但我认为我的flush方法是错误的。刷新上游消息后,我注意到套接字立即关闭
public class Pinger extends ChannelOutboundMessageHandlerAdapter<ByteBuf> {
private static final ByteBuf DUMMY = Unpooled.wrappedBuffer("DUMMY".getBytes()
关于我应该在netty应用程序中创建多少工作线程,是否有一些指导?默认情况下,netty创建2*个处理器线程,但为用户提供了创建更多线程的灵活性。我的问题有两个:
(i) 默认情况下创建“2*个处理器”线程的基本原理是什么
(ii)在什么情况下我应该覆盖此默认值???没有明确的答案
这要看情况而定
*服务器上还运行什么
有多少并发连接
正在处理哪些处理程序
线程忙吗
因此,你将需要检查,例如一个档案,以找到你的应用程序的最佳设置
我将channelID字符串存储到channelGroup中,但稍后我需要获取通道以将一些内容写入客户端。如果我可以获取channelID字符串,如何获取频道?谢谢 您需要ChannelId对象,然后使用ChannelGroup.find(ChannelId)
我想使用位于下面的现成压缩处理程序(特别是WebSocketClientCompressionHandler)
io/netty/handler/codec/http/websocketx/extensions/compression/
但是,在netty-all-4.0.25.jar下找不到整个文件夹
有没有具体的原因?
使用这些示例的最佳方式是什么?这只是Netty 4.1的一部分,因此需要使用4.1.x
我对Netty 5(或4)中Tebuf的参考计数有一些疑问。我发现,当bytebuf退出生命周期时,如果我不释放它,就不会发生任何事情,似乎bytebuf使用的内存可以正确地进行GCD
在这个链接中,它说设置JVM选项“-Dio.netty.leakDetectionLevel=advanced”或调用ResourceLeakDetector.setLevel()可以检测到资源泄漏,但我无法用下面的代码重现它
public class App {
public static ByteBu
我有8个Netty服务器通道监听不同的端口(HTTP/S、WebSocket、MQTT、TCP等)。从源代码中,我看到所有这些服务器将共享相同的分配器-ByteBufAllocator.DEFAULT。所以我的问题是——这是在不同服务器之间使用相同分配器的推荐方法吗?或者我可以为每个服务器创建单独的分配器?像这样:
ByteBufAllocator allocator = new PooledByteBufAllocator();
b.childOption(ChannelOption.ALLO
netty4中的ChannelHandlerContext.executor()和Channel.eventLoop()之间有什么区别
当我想在处理程序中运行任务时,我应该使用哪一个
ctx.executor().submit(task);
ctx.channel().eventLoop().submit(task);
一般来说,这是相同的。选择什么方法取决于你。您还可以查看AbstractChannelHandlerContext.executor()方法,发现上下文重复通道代码:
publ
我们有一个storm群集,运行时有3个节点和多个拓扑。我们使用apache-storm-1.2.2和java1.8.0\u162
目前我们遇到的问题是,在发生错误且Netty服务器不可用后,随机拓扑会在随机时间停止发射。这可能在几个小时或几天后发生
因为我们没有改变风暴螺栓发出或执行数据的逻辑,所以我们目前不知道如何抛出这样的错误。还有一个问题是,为什么整个拓扑在出现这样的错误后停止工作
似乎某些HashMap的反序列化有问题。但我们不知道这是怎么发生的
以下是导致故障的一名工人的错误:
201
更新通道管道似乎不是线程安全的。有时,特别是在不同线程中执行时,向通道管道添加处理程序,然后触发通道读取事件,添加的通道处理程序无法捕获。例如:
不起作用
新线程(()=>{
ctx
.channel()
1.管道()
.addLast(H1)
.addLast(H2)
ctx.fireChannelRead(msg)
}).run()
温度修正
新线程(()=>{
ctx
.channel()
1.管道()
.addLast(H1)
.addLast(H2)
//工作
ctx.channel
我们正在开始开发一个将使用SCTP协议作为客户端和服务器的应用程序
根据文件,SCTP似乎包含在Netty 4.0中
我们现在可以使用Netty 4.0来开发SCTP吗?是的,但是您可以注意到它仍然处于alpha状态,因此在它成为最终版本之前,您可能会看到一些api损坏。也就是说,我认为公平地说,API是相当稳定的。因此,不要期望有太多的破损。感谢您的回复。SCTP api最终版本的发布有时间表吗?还没有。。但我怀疑我们将在下个月削减第一个测试版,并在一个月后削减最终版。所以我们真的很“近”;)
在Netty 3中,我们可以做到:
Channel.setReadable(false);
Channel.setReadable(true);
我读过:
但在最新的Netty 4版本(4.0.17,)中,此代码无效,因为没有可读的ChannelHandlerContext:
serverChannel.pipeline().firstContext().readable(false);
serverChannel.pipeline().firstContext().readable(tru
我克隆了netty repo并运行了代理示例
服务器启动正常。
当我在浏览器上点击localhost:8443时,
我得到以下错误
java.io.IOException: Connection reset by peer
at sun.nio.ch.FileDispatcherImpl.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39)
at sun.ni
我有一个典型的netty服务器设置,只是对实现特定类型请求的“正确”方法有点困惑,或者更确切地说,将OrderedMemoryAwareThreadPoolExecutor添加到pipelinefactory中。对于大多数请求,典型的NIO请求/响应是可以接受的。但是,对于特定类型的请求,我希望使用传统的线程I/O(ala OMATPE),因为它可能是一个长时间运行的请求。我现在要做的是解析URI以获得特定类型的请求。短请求将正常处理,类型为“/long/running/request”的请求将
我正在使用netty 3.2.7。
当我从客户机向同一台计算机上的服务器发送消息(包含在DAOMessage中)时,它工作正常
如果我做的完全相同,但是客户机和服务器在不同的计算机上,我会得到以下异常。服务器正在抱怨找不到邮件。当然,它所需要的只是在通道/管道中传递给它的引用
有人知道如何解决这个问题吗
31-Dec-2011 12:59:17 org.jboss.netty.server.SecureServerHandler exceptionCaught
WARNING: Unexpect
我需要可重用的异步http解析代码。netty是否只包含一些用于解析部分的api?(我一直认为解析器应该是独立的、可重用的,并且不与框架绑定,所以我希望netty的解析器也可以重用)
这将是伟大的饲料在字节这样,如果它返回空
还没有足够的字节
private byte[] previousData;
byte[] data = incomingMergedWithPrevious(previousData);
HttpResponse resp = httpResponseParser.par
如果我要对以下代码段进行编码:
class SimpleHandler extends SimpleChannelUpstreamHandler {
...
public static void main( String[] args ) throws Exception {
ServerBootstrap b = new ServerBootstrap(
new NioServerSocketChannelFactory(
E
有人能给我一些关于向Netty添加DTLS支持的见解吗?
Netty是否正在使用openSSL支持TLS和相关应用程序
问候
MaheshNetty使用JDK ssl或基于openssl的,具体取决于您指定的依赖项。也就是说,目前不支持内置DTL
我已经基于netty 4.0.32.Final编写了传输服务器
在极少数情况下,我会在Oracle Solaris 11.1 SPARC上遇到下一个错误:
Failed to set a channel option: [id: 0x970c09c4, /91.221.145.225:48986 => /0.0.0.0:0]
io.netty.channel.ChannelException: java.net.SocketException: Invalid argument
at io
标签: Netty
sharingchannelloose-coupling
在一个客户机-服务器应用程序上工作,在服务器端我有一个面向客户机的服务组件,它拦截来自客户机的所有套接字请求,扫描消息后,它通过消息总线路由到不同的服务,因此它们是松散耦合的
大概是这样的:
问题是,一旦使用业务逻辑完成服务,则需要通过“请求处理程序服务”将回复发送回客户端,因此来自所有服务的所有回复消息都将通过单个服务组件,即“请求处理程序服务”因为我没有其他服务的ChannelHandleContext对象引用来将回复发送回客户端
我想用一个集中式分布式缓存服务(比如memcached)来
是否有可用的Netty环境选项列表,以-Dio.Netty开头。?我在Netty文档页面或其他地方没有找到任何东西。没有。。。请打开一个问题,我认为为这个问题提供一些东西会很有用。我会提出一个问题,但可能会让人难以解决。我在代码中看到了io.netty.util.internal.SystemPropertyUtil.getXX(key),它有时使用静态字符串,有时对键使用就地Sting…正如@norman maurer所建议的那样,在上提出了这个问题。
客户:
服务器:
public class ClientHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
System.out.println("Start");
ctx.writeAndFlush(Unpooled.copiedBuffer
我不清楚在基于MessageToMessageDecoder构建自定义POJO解码器时是否需要使用像LineBasedFrameDecoder这样的帧解码器
它在StringDecoder的Netty源代码中声明
我想是的,买为什么?我问自己这是否应该是一个答案;您可以使用任何您想要的实现。JavaDocs提供了一个关于如何对字符串数据进行编码/解码的示例。您可以实现自己的处理程序并确定字符串的开始和停止
例如,我实现了自己的数据包协议,它为在线视频游戏混合了大量数据。所以我通过读取一个变量然后
标签: Netty
socket-timeout-exception
问题
ServerBootstrap bootstrap = new ServerBootstrap()
.group(NativeTransportUtil.newEventLoopGroup(), NativeTransportUtil.newEventLoopGroup())
.channel(NativeTransportUtil.serverSocketChannelClass())
.opt
我正在运行一个带有UDP协议的客户端路由器服务器scenaqrio,版本为Netty 3.2.3
我看到客户机和服务器通道在NIO工作人员处注册良好,
但是从服务器返回的响应被分配给了错误的工作者,
NIODatagramWorker,因此它是一个不同的选择器,并且消息到达错误的管道,就好像它来自客户端一样
请告知,
YairNetty UDP有点棘手。UDP实际上只有一个管道,因此如果更改管道中的选择器或处理程序,可能不会产生预期的效果。请看Netty用户组中的这一点,该用户组信任Lee对此行
我有一个系统,它依赖于Netty来交换相对较短的Gson字符串:通常不到几百字节,有时几KBs。我是否需要担心丢失数据包,从而在我的服务器/客户端中实现解码器,或者(大部分)可以吗?这取决于客户端如何连接到服务器
例如,如果您正在使用TCP,那么您不必直接担心代码中的数据包丢失,因为协议本身负责自动重新传输任何丢失的数据包(以及确保数据包到达的顺序)。但是,如果您使用的是UDP,则数据包可能会丢失,您必须处理检测和重新传输丢失的数据包(以及排序问题等)
还取决于如何解码您的消息,您可能需要考虑单
看起来ReadTimeoutHandler的默认行为是向上游发送ReadTimeOutException垃圾邮件,直到共享计时器对象被销毁或通道被销毁。问题是,它设法在通道关闭之前触发多个ReadTimeOutException
这是意料之中的事还是我做错了什么
让它只发出一个ReadTimeoutException的最棘手的惯用方法是什么?我应该只编写一个只传递它在上游看到的第一个ReadTimeoutException的通道处理程序吗?我猜您的要求是一个请求一个超时
您可以稍微更改ReadT
这与我关于统一设置的问题有关()
我试图发送一个两字节的序列,前缀为我的协议的所有流量;我这样做是为了在我更新以支持多个协议时在统一处理程序中嗅探一些东西
在客户机上,我在管道的末尾有一个简单的出站处理程序,在ByteBuf前面加上两个协议标识字节,在服务器管道的前面有一个简单的入站处理程序,用于提取字节。我已经设法让这个小消息工作
服务器队列中的后续处理程序是一个LengthFieldBasedFrameDecoder,我正在使用它在传入的流量(protobuf对象)中设置帧。似乎正在发生的是
标签: Netty
bytebufferencoder
我生成一个ByteBuffer对象:
(4字节为00)+(4字节为gson数据长度)+(一些字节为gson字符串格式)
如何将此数据发送到服务器部件?
我需要在代码中使用任何编码器吗?或者没有它也可以工作
public class ClientSocketInitializer extends ChannelInitializer<SocketChannel> {
private static final ObjectEncoder ENCODER = new Object
我正在使用netty的FixedChannelPool来维护并发连接。由于多个线程将访问通道池,我想知道操作acquire()和release(channel)是否是线程安全的
TIA在FixedChannelPool中有关于此问题的评论:
//无需担心同步,因为修改队列或计数的所有操作都是由上述EventExecutor完成的。
但我认为这不是线程安全的,因为connect承诺可以添加到任何eventloop线程的taskQueue中。如果将同一密钥的连接承诺添加到两个不同的eventlo
除了netty socket.io之外,我还实现了一些REST端点,主要用于控制服务器或获取其运行状况
我在端口443上运行netty socket.io,在另一个端口上运行一个单独的jetty服务器,我也想将其移动到端口443
我知道我不能在同一个端口上运行两个服务,但我相信我看到socket.io在内部使用jetty。有没有办法为我的REST端点使用内部jetty实例?Netty-Socket.io似乎构建在Netty之上,这与jetty不同。Jetty是一个servlet容器,而Netty
当我从客户端异步发送消息,然后关闭通道时,Netty抛出以下异常
java.nio.channels.ClosedChannelException
at sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:133)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:324)
at org.jboss.netty.channel.socket.
关于IOworker的writeTaskQueue。它似乎应该包含工人负责的最大频道数。然而,我不断重复一个场景,队列中的人比这多得多。我在jboss社区上看到一个jira,它最终被解决为非bug。这是否意味着写入任务队列可以比其负责的通道数量多得多?如果是这样的话,这个队列大小是否还有一个逻辑绑定 您应该使用Channel.isWritable()检查是否有足够的内存供通道排队字节。可通过writeBufferHighWaterMark和writeBufferLowWaterMark设置限制
您好,我正在使用netty 4示例(qotm)创建一个使用“引导”的UDP服务器。此类不允许管道处理程序。我遗漏了什么吗?您可以为Bootstrap.handler(…)指定一个ChannelInitializer,就像管道中有多个处理程序的其他示例一样
请记住,UDP是无连接的,因此UDP通道使用单个管道处理来自多个远程主机的所有数据包。要为不同的协议设置不同的管道,必须创建多个UDP通道并将它们绑定到不同的端口上,就像在Netty 3中所做的那样。我最终实现了自己的io.Netty.boot
在我使用Netty进行的一些实验中,主线程在所有I/O线程完成之前退出。我一直在用倒计时锁来防止这种情况。这是正确的方法吗?有没有避免这种情况的标准方法?我认为倒计时闩锁是一种很好的方法。但我不知道我是否会称之为标准。一般来说,关闭是一个棘手的问题。我开发的大多数应用程序都使用了各种不同的方法来关闭它们的各种组件。你可以等到你创建的频道关闭。例如:
public static void main(St ring[] args) throws Exception {
ChannelFact
我正在创建一个REST服务,它将一些计算值返回给客户端。内蒂在这方面表现得非常出色。但是,在某些情况下,我需要为同一URI(查询)返回多个值。以下是我们考虑的方法:
i) 将所有值打包成客户机必须知道如何解码的自定义格式。
ii)使用MIME多部分支持
方法ii)更干净,与REST方法一致。是我一个人,还是我觉得很难在Netty中找到解决方法
我浏览了Netty文档中引用的文件上载示例。但我不知道如何对内存中的数据执行相同的操作
有什么线索/想法吗?我知道这是一个老问题,但如果仍然需要:如果我理
有人知道关于Nettys各种设置的含义和/或效果的任何文档吗?这些是套接字选项,您可以在操作系统的setsockopt文档(SET socket options)中找到说明。以下是和的文档。这些通道选项直接映射到上的属性及其子类,如或。这些类型的javadoc详细介绍了各种选项。正如Alex所说,其中许多对应于OS套接字选项
我正在使用netty编写一个HTTP服务器,它将接收一个httpwebservice请求。通过引用,我能够在HTTP处理程序中获取请求。现在,我应该为ex编写一个基于后端servlet的应用程序:使用tomcat来处理该请求,还是应该在netty处理程序代码中使用switch case或其他方法来处理该请求
哪种方法更合适?如果两者都是错误的,那么还有其他方法吗?如果您编写了一个后端servlet应用程序,那么使用Netty作为应用程序的后端有什么意义
您可以使用其中任何一个来接收HTTP请求并
为了在Netty(4.0.34)中处理任何用户生成的事件,我们使用ChannelHandlerContext上的fireUserEventTriggered(event)
调用管道中下一个处理程序的fireUserEventTriggered方法userEventTriggered(final ChannelHandlerContext ctx,final Object evt),随后可以处理生成的事件
但是,在下一个处理程序的userEventTriggered方法中,我无法访问存储在前一个处
我使用的是Netty 4.1.0.Final,我面临一个问题,消息没有通过出站处理程序。我发布了一个示例程序,其中有一个入站处理程序和一个出站处理程序。入站处理程序在ChannelHandlerContext中使用writeAndFlush,我的理解是它应该将消息转发给管道中第一个可用的出站处理程序。为了简单起见,内存管理被忽略
引导代码
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup
我使用的是Netty 4.0.37,有一个频道池。是否有任何方法可以在运行时增加或缩小池大小?从5到20再回到5,例如。。。您需要编写自己的ChannelPool实现。感谢您的回复。接口通道池中有一个acquire方法,您建议我在其中加入我的调整大小逻辑以实现吗?由于我正在用更多的连接扩充池,池中是否有我需要添加/删除新频道的连接“列表”?
我们使用Netty实现了一个UDP服务器。该服务器每秒需要处理大量的UDP请求,比如说数百万个。我们想知道Netty UDP服务器支持这种工作负载的最佳策略是什么:增加UDP服务器的缓冲区大小、设置UDP服务器的“集群”或其他什么
(如果集群是解决方案,那么建议集群的负载平衡器是什么?因为没有太多细节,很难给出很多建议。也就是说,一般来说,我会创建多个EpollDatagramChannel实例,并使用EpollChannelOptions将它们绑定到相同的InetSocketAddress。因
我在编写发送/接收数据的Netty http服务器时遇到一些问题,
我非常感谢任何人的帮助或解释
我的客户端html代码如下:
>
服务器端代码:
HttpRequestServerHandler:
大宗报价
问题是您将HttpRequest设置为分块。当这样做时,它的内容就变成了empy。这在javadocs中也有说明,请参见[1]
如果您真的想使用分块响应,您需要首先编写标记为分块的HttpResponse,然后通过HttpChunk写入其内容。见[2]
[1]
[2] 无错误,但在浏览器端
您是否有使用Netty的HTTP over UDP或类似框架的经验?(米娜,骆驼)?我们得到的结果好坏参半,并且有兴趣了解您在UDP上运行正式协议的经验
编辑:任何传输控制+数据并通过UDP运行的C/S协议都有兴趣了解:SMTP、HTTP、FTP。。。我们感兴趣的是了解成功实现/使用UDP协议的人。==UPDATE===
我对它了解不多,但SCTP提供了一些与TCP相同的流控制,可以通过UDP进行隧道传输。我提到它是因为我相信netty 4支持SCTP传输,所以这可能是您的一个选择
HTTP假
有什么区别吗?是否ctx.close只是ctx.channel.close的一个较短版本?ctx.close()从ChannelHandlerContext的点开始流经ChannelPipeline,而ctx.channel().close()将始终从ChannelPipeline的尾部开始。假设我们有三个处理程序在管道中,它们都拦截close()操作,并在其中调用ctx.close()
ChannelPipeline p = ...;
p.addLast("A", new SomeHandle
“WildFly 10.1.0.决赛”包括“Netty至4.0.33.决赛”。但我想使用最新的“Netty 4.1.8.Final”。我想知道是否有任何潜在的问题
非常感谢您的评论/反馈。只要您在应用程序中捆绑,您就会很好
否则,请看我在developer.jboss.org上的回复这真的属于“试一试”(TIAS)的口头禅。对于SO来说,最好的问题是,如果你尝试过,遇到了问题,并且问了一个关于解决问题的具体问题。
我是弹性搜索的新手。
我是一个网络开发人员,很少有网络经验
我已阅读了下列文件-
https://netty.io/
https://stackoverflow.com/questions/23839437/what-are-the-netty-alternatives-for-high-performance-networking
我无法理解netty进行弹性搜索的目的。有人能用外行的语言给我解释一下吗?Elasticsearch提供了两个与之对话的界面。一个是HTTP接口,另一个是传输接口
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 23 页