实际上,我正在使用Netty编写一个客户机-服务器程序,但我陷入了一个自上周以来无法解决的问题。
因为这是一个相当大的程序,我不能粘贴我所有的代码,但是,我开始使用这个例子从Netty的github(https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/securechat)
在游戏的上下文中,我希望允许玩家键入他喜欢的每个命令(更改他的名字,或者查看发生了什么),但问题是,在输入过程中,我无法接收服务器的答案。
通过回调接收服务器回答:
public class ClientHandler extends SimpleChannelInboundHandler<String> {
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
System.out.println(cause.getMessage());
ctx.close();
System.exit(84);
}
@Override
public void channelRead0(ChannelHandlerContext arg0, String answer) throws Exception {
// HERE
}
}
在我的主循环中,我实际上正在这样做(我简化了它,因为它太长了):
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
line = in.readLine();
// Process and send to server
System.out.println(line);
当我等待用户输入并同时收到服务器应答时,输入阻塞了我的回调。我只在输入完成时收到它。
有人能告诉我吗?我如何继续进行非阻塞输入或其他操作,以便在服务器实际向我发送内容时,我可以停止输入过程并读取答案?
非常感谢。
您应该将输入循环与netty处理程序解耦。
如果您从netty处理程序启动游戏输入循环,这将意味着netty线程永远不会返回netty的核心,因此您的通道被标记为繁忙,这意味着新的输入将排队,并且只有当线程返回时才会被处理。
解决这个问题的一个好方法是在程序开始时创建一个新的线程实例,并使该线程调用netty的方法来执行游戏操作。
我正在尝试重建一个与elasticsearch 2.4对话的插件,以便与elasticsearch 5配合使用。 代码来自:https://github.com/pentaho/pentaho-kettle/blob/master/plugins/elasticsearch-bulk-insert/src/org/pentaho/di/trans/steps/elasticsearchbulk/E
在Netty中创建客户端连接时,我有一个问题。 这里,为什么我们没有一个bind方法,将通道绑定到发起客户端连接的端口(在客户端)?我们唯一需要提供的就是给出服务器地址和端口如下: 这是在客户端还是服务器端创建了一个新的通道?此通道绑定在客户端的哪个端口? 我们在执行服务器端引导时进行绑定,如下所示 我很困惑,不明白客户端从哪个端口向服务器发送数据,使用的是什么通道?
我对如何处理网络中的大量连接感到困惑(3.6.2。FINAL)和保持活着=true。 对于作为服务器端连接器在netty客户机上工作,对另一个服务进行http调用,它希望始终保持连接打开以获得性能(keep alive=true)。 问题:开放频道的数量有一个硬限制,超过这个限制,客户端在尝试打开频道时将挂起。为什么没有例外只是挂起?这是通道超时的设置吗? 我似乎无法理解Netty对工作线程内连接
我需要让客户能够建立许多连接。我使用Netty 4.0。不幸的是,所有现有的示例都没有显示如何创建大量连接。 这是正确的决定吗?还是会更好?
我正在努力与Netty 4.0.8网络套接字客户端示例和SSL,我似乎无法将数据发送到Netty SSL网络套接字服务器示例。尽管围绕这个问题已经有很多帖子了,(我相信我已经浏览了所有的帖子),最常见的建议是在管道的开头添加一个sslHandler,但它不起作用。握手似乎是成功的,因为它也表明了一个相关的问题在这里。 我记得4.0版的情况也一样。0,但我还是设法让它工作了。然而,当我升级到4.0时
我刚刚把我的Netty 3软件转换成5,我遇到了一个问题。只有一个客户,一切都很好。我可以使用两个解码器(它们可以正常切换)并允许我登录。 当我尝试连接另一个客户端时,无论第一个客户端是否仍然连接,都会出现问题。第一个客户端保持连接绝对正常,但第二个客户端根本无法连接(不通过第一个解码器)。 这是我的引导程序: 第一解码器: http://pastebin.com/9FWzXSVE 第二个解码器: