实际上我使用Netty编写客户端 - 服务器程序,但是我陷入了自上周以来无法解决的问题。netty客户端上的Java输入
因为这是一个非常大的项目,我不能粘贴我所有的代码,但是,我开始使用从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);
当我等待用户输入并同时接收服务器应答,则输入阻止了我的回调。我只在输入完成时收到它。
有人能够赐教吗?我怎样才能做出一个非阻塞的输入或任何其他的东西,当服务器实际上给我一些东西,我可以停止输入过程,并阅读答案?
谢谢!
我有点困惑。在用户输入之前,您会收到来自服务器的答案? –
实际上,当我在做“line = in.readLine()”时,我很可能会收到服务器的回答,但我无法得到它。例如:有5名玩家。播放器5正在播放,我正在键入要发送到服务器的内容。当玩家轮到他时,游戏(无论什么原因)结束了:所以游戏应该从头开始并通知所有玩家。但是,由于玩家1,2,3和我卡在readLine()过程中,我们无法获得服务器的通知(回调不被调用,但通常应该)。只有当我们通过readLine部分时,我们才会得到它。 – NPanda
http://stackoverflow.com/questions/40668791/how-can-a-netty-server-cancel-receiving-a-response-from-a-web-server这可能会帮助你。 –