Tag: netty

什么时候写入操作的Netty ChannelFuture“完成?”

在Netty 4中,确切地说,用于写入操作的ChannelFuture (比如NioSocketChannel )是否已“完成”? Netty会等待ACK数据包吗? 在将写入期货标记为已完成时, ChannelPipeline中的输入和输出处理程序之间是否存在任何相互依赖关系?

在netty中ctx.write()和ctx.channel()。write()之间有什么区别?

我注意到ctx与处理程序不同,即使这些处理程序位于同一个管道中,例如 p.addLast(“myHandler1”, new MyHandler1()); p.addLast(“myHandler2”, new MyHandler2()); 在MyHander1 @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { System.err.println(“My 1 ctx: ” + ctx + ” channel: ” + ctx.channel()); super.channelRead(ctx, msg); } 在MyHandler2中 @Override protected void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { System.err.println(“My 2 ctx: ” + ctx + ” channel: ” + […]

如何在其他类中读取netty中的消息

我想在除InboundHandler之外的类中的特定位置读取消息。 我找不到在channelRead0方法中读取它的方法,这是从netty框架调用的。 例如: context.writeMessage(“message”); String msg = context.readMessage; 如果这是不可能的,我怎样才能将我在channelRead0方法中得到的结果映射到我在另一个类中进行的特定调用?

Java自定义事件处理程序和侦听器

我目前正在使用Socket.io的Java实现,可在此处获取: netty-socketio 我已经启动并运行了服务器,它在客户端和服务器之间很好地接收/发送消息,但是我需要在接收到某些消息时触发事件,这就是我感到困惑的地方。 这是我的代码: server.addEventListener(“message”, clientData.class, new DataListener() { @Override public void onData(SocketIOClient client, clientData data, AckRequest ackRequest) throws Exception { System.out.println(“Message from client: ” + data.getMessage()); } }); public class clientData{ String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } 基本上我想要发生的是当从客户端收到特定消息时,我需要在另一个类中运行一个函数。 我花了最近两个小时阅读Observable , Observer […]

Netty客户端到服务器消息

这实际上是我在这里的第一篇文章,我一直试图弄清楚这一段时间,但我终于打电话给旗帜并试图在这个主题上得到一些帮助。 所以我有一个客户端和一个服务器,它是在echo客户端/服务器和安全聊天客户端/服务器之后建模的。 我对聊天的SSL部分并不感兴趣,只是为了确保我收到客户端/服务器的响应。 我将在本文的底部添加所有相关代码。 我目前遇到的问题是,我可以在客户端连接时从服务器向客户端发送消息,但是在服务器向客户端发送初始消息时,我无法从客户端向服务器发送消息。 从服务器发送的消息是: Welcome to the server! 来自客户端的消息是 test 我应该知道我从客户端收到了消息,因为它应该回显 [You] test 我知道服务器看到客户端,它给我状态更新但我不能出于某种原因向服务器发送消息。 现在提出一个问题……有一次我正在使用StringDecoder和StringEncoder作为解码器和编码器…如果你正在制作一个游戏(这就是我正在做的事情)你会有类似的东西登录,玩家动作,世界更新等……发送Strings是最好的方法吗? 我知道我看到很多字节流,在我的编程课中,我经历过触摸操作字节流,但我仍然不是很满意它们。 如果字节流是更好/最好的方法,那么有人可以详细解释如何操作字节流以处理不同的项目。 如前所述,这是客户端中所有内容的开始: public class Client { public Client() { // Initialize the window GameWindow.init(); // Initialize the server connection ClientHandler.init(); } public static void main(String[] args) throws Exception { // Set a default server address if one […]

Netty java从ByteBuf获取数据

如何在下面的代码中有效地从ByteBuf获取字节数组? 我需要获取数组然后序列化它。 package testingNetty; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; public class ServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { System.out.println(“Message receive”); ByteBuf buff = (ByteBuf) msg; // There is I need get bytes from buff and make serialization byte[] bytes = BuffConvertor.GetBytes(buff); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) […]

在Netty 4.0中创建一个ByteBuf

两个简单的问题,我无法通过文档中的解决方案解决这些问题: 我有’byte []’。 如何将其转换为ByteBuf? 我有一个NIO’ByteBuffer 如何将其转换为ByteBuf?

与Netty和NIO高度并发的HTTP

我正在使用示例Netty HTTP客户端代码 ,以便在并发的线程环境中发出http请求。 但是,我的系统在相当低的吞吐量下完全破坏(有一些例外)。 在几乎伪代码中: ClientBootstrap bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory()) bootstrap.setPipelineFactory(new HttpClientPipelineFactory()); ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port)); Channel channel = future.awaitUninterruptibly().getChannel(); HttpRequest request = new DefaultHttpRequest(); channel.write(request); 在示例中,为了发出请求,我创建了一个ClientBootstrap,并从那里(通过一些箍)一个Channel来编写HTTPRequest。 这一切都有效,也很好。 但是,在同时发生的情况下,每个请求是否应该通过相同的环节? 我认为这就是我现在正在打破的事情。 我应该以完全不同的方式重用连接或构建我的客户端吗? 另外:我在Clojure中这样做,如果这有任何区别的话。

找出当前Java VM中打开的网络套接字

我正在编写一个端到端测试,我的Java程序发布了它的所有资源 – 线程,服务器套接字,客户端套接字。 它是一个库,因此通过退出JVM释放资源不是一种选择。 测试线程的释放很容易,因为你可以向ThreadGroup询问其中的所有线程,但是我还没有找到一个很好的方法来获取当前JVM正在使用的所有网络套接字的列表。 有没有办法从JVM获取所有客户端和服务器套接字的列表,类似于netstat? 我在Java 7上使用Netty和OIO (即java.net.ServerSocket和java.net.Socket )。该解决方案需要在Windows和Linux上运行。 我的第一个偏好是使用纯Java从JVM中询问它。 我试图寻找一个MX Bean或类似的,但没有找到任何。 另一个选择可能是连接到JVM的分析/调试API并询问Socket和ServerSocket的所有实例,但我不知道如何做到这一点以及是否可以在没有本机代码的情况下完成(AFAIK, JVMTI仅限本机) )。 此外,它不应该使测试变慢(即使我最慢的端到端测试只有0.5秒,其中包括启动另一个JVM进程)。 如果询问JVM不起作用,第三个选项是创建一个设计,在设置时跟踪所有套接字。 这样做的缺点是可能会遗漏一些创建套接字的地方。 由于我使用Netty,它似乎可以通过包装ChannelFactory和使用ChannelGroup来实现 。

如何在没有JVM参数的情况下隐藏java 9中的“非法reflection访问”警告?

我只是尝试用Java 9运行我的服务器并得到下一个警告: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/azureuser/server-0.28.0-SNAPSHOT.jar) to constructor java.nio.DirectByteBuffer(long,int) WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil WARNING: Use –illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release 我想隐藏此警告而不在启动期间向JVM选项添加–illegal-access=deny […]