草庐IT

Netty-NIO

全部标签

java - 在服务器端或客户端的 Java NIO Socket 期间,什么时候套接字连接准备好发送数据?

我正在使用JavaNIO,这是我第一次建立一个有效的TCP连接(到目前为止我只完成了UDP和很久以前的一个简单的TCP测试程序)。现在,我不确定我可以可靠地开始向客户端发送数据的确切时间,以便他们知道另一端有Activity连接(假设没有出错).假设一切都是非阻塞的。客户:1)打开一个没有绑定(bind)的新套接字channel,因此可以将其设置为异步s=SocketChannel.open()2)设置为非阻塞s.configureBlocking(false)我们需要在这里绑定(bind)吗?或者这只是为了我们想引用本地端口?3)尝试连接到正在监听的服务器s.connect(some

java - 如何使用 Netty 在单个端口上编写多协议(protocol)处理程序?

我是Netty的新手,我想知道当TCP客户端有时发送可变长度的二进制记录(十六进制)并且有时发送可变长度的ASCII记录时如何读取/处理传入的TCP数据,这些记录都没有定界通过回车或换行。TCP客户端正在发送字节流,如下所示:二进制字节流,以“$”开头但字节数不定且不以任何字符结尾,并且一个ASCII字节流,以“(”开头,以“)”结尾,但字节数不定,且不以任何字符结尾两组记录到达同一个端口。我需要如何编写基于Netty的TCP服务器来处理/读取两者?提前致谢。库纳尔 最佳答案 检查portunificationexample.它完全

java - Netty 客户端无法从非 Netty 服务器读取响应

我有一个连接到旧大型机(52年)的Tcp客户端,它发送和接收来自它的请求和响应。这里是我的客户端的核心连接部分,publicclassSimpleConnector{privateStringcarrier;privateSocketChannelsocketChannel;publicstaticfinalbyteEND_OF_MESSAGE_BYTE=(byte)0x2b;publicSimpleConnector(Stringcarrier,InetSocketAddressinetSocketAddress)throwsIOException{this.carrier=this

java - Netty writeAndFlush() 不完整

我的tcp客户端请求netty服务器,netty服务器使用writeAndFlush()返回393718字节。但客户端只收到262142字节。我使用“tcpdump-A”来抓取数据包,也小于393718。所以我认为正确的是在nettywriteAndFlush()函数中?这是代码TCP服务器:publicstaticvoidmain(Stringargs[]){intprocessorsNumber=Runtime.getRuntime().availableProcessors()*3;ThreadFactorythreadFactory=newDefaultThreadFactor

java - 由于将请求从老板线程传递到工作线程而导致的 netty 延迟?

我有一些关于Netty(服务器端)、TCP/IP应用的问题;我想知道在将请求从老板线程传递到工作线程时是否会因为netty(由于缺少配置等)而存在延迟?我正在使用:newOrderedMemoryAwareThreadPoolExecutor(350,0,0,1,TimeUnit.SECONDS);实际上,我设置了最大线程数350,因为我不确定最佳数量。我每分钟记录并发工作线程计数,似乎平均值太低(勉强超过10)。所以我会减少这个数字,因为它不是必需的。为了获得最佳性能,是否还有其他参数、要点需要注意?bootstrap.setOption("tcpNoDelay",true);-设置

tcp - netty - 在 TCP 服务器上配置超时

我有一个关于在nettyTCP服务器上配置超时的问题。现在,我像这样设置连接超时:serverBootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS,20000);这似乎有效,一切顺利。现在我想知道是否可以在服务器端定义“读取超时”。这个想法是当读取超时结束时服务器工作线程被中断,以便它可以用于其他任务。当我尝试按如下方式设置读取超时时,我在启动时收到“不支持的channel选项”警告:serverBootstrap.childOption(ChannelOption.SO_TIMEOUT,30000);有没有办法在服务器端实现“读取

java - 使用 Java NIO 的非阻塞服务器

关闭。这个问题是notreproducibleorwascausedbytypos.它目前不接受答案。这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topic在这里,这个问题的解决方式不太可能帮助future的读者。关闭2年前。Improvethisquestion我正在使用this构建没有可写部分的javanio服务器的教程。一切正常,除了一件有趣的事情:当客户端发送数据包太快时,服务器不会收到所有消息,服务器总是收到第一个和第二个数据包,但不会多于此。如果客户端发送数据包的速度很慢,服务器会收到所有数据包。有什么想法吗?我正在添加服务器类代码,如果您需要下

java - NIO - 检测关闭的连接

我已经编写了一个使用JavaNIOAPI执行非阻塞IO的服务器。我看到有时客户端应用程序突然关闭(例如由于断电)并且连接在服务器端保持打开状态。有同事遇到过同样的问题,说他是用heartbeatsovertheline来检测这种东西,但我希望有更简单的方法。有没有其他人遇到过这个问题?一些附加信息:如果我当前的服务器设计在尝试读/写操作时捕获到IOException,它将取消一个键并关闭相应的channel。这种方法似乎在99%的时间里都有效;我只见过少数情况下连接似乎保持打开状态。 最佳答案 如果没有应用级别的心跳,您唯一的选择就

netty中TCP keep-alive判断client是否断开

我正在尝试确定客户端是否已关闭来自netty的套接字连接。有办法做到这一点吗? 最佳答案 在客户端通过close()关闭套接字并且TCP关闭握手已成功完成的通常情况下,channelInactive()(或channelClosed()中的3)事件将被触发。但是,在不寻常的情况下,例如客户端计算机由于断电或拔下LAN电缆而脱机,可能需要很长时间才能发现连接实际上已断开。要检测这种情况,您必须定期向客户端发送一些消息并期望在一定时间内收到其响应。它就像一个ping-你应该在你的协议(protocol)中定义一个周期性的ping和pon

tcp - 如何编写一个高性能的 Netty 客户端

我想要一个非常高效的TCP客户端来发送googleprotocolbuffer消息。我一直在使用Netty库开发服务器/客户端。在测试中,服务器似乎能够每秒处理多达50万个事务,没有太多问题,但客户端往往会达到每秒18万个事务的峰值。我的客户基于Netty文档中提供的示例,但不同之处在于我只想发送消息而忘记了,我不想要响应(大多数示例都会得到响应)。有没有办法优化我的客户端,以便我可以获得更高的TPS?我的客户应该维护多个channel,还是我应该能够通过单个channel实现比这更高的吞吐量? 最佳答案 1)如果客户端只对发送感兴