我是否可以将Java的BufferedReader与事件侦听器一起使用,而不是while(true)?
我正在编写一个Java客户机和服务器,它们之间的对话都是正确的。然而,目前,客户端必须始终先向服务器发送消息,然后才能接收消息——但我希望服务器能够在客户端不要求的情况下发送消息
在我的主要语言AS3中,我会在socket中添加一个事件侦听器,并以这种方式处理数据——但我似乎无法找到在Java中如何做到这一点
目前,我的客户机中包含以下代码:
public String send(String message) {
out.println(message);
try {
return in.readLine();
} catch (IOException ex) {
return "";
}
}
基本上我调用它,传递我的消息,它返回给我服务器的响应。 我不想这样做,而是想在那里发送一条消息,如下面所示,并让响应在不同的地方(由事件侦听器)拾取
public void send(String message) {
out.println(message);
}
由于我不知道事件侦听器是如何工作的,我确实考虑过使用一个单独的线程来运行while(true){in.readLine;}
,但如果可能的话,我想避免这种情况;我对线程不太熟悉,我想让它尽可能简单
# 1 楼答案
最简单的方法是使用线程。我将至少有一个线程读取套接字,该套接字允许服务器随时向客户端发送消息
混合响应和事件的问题是,第一个块无法工作,因为“响应”可能是一个事件
如果不想使用线程,可以使用
然而,它只会在发送请求时读取事件,如果不定期这样做,它可能会导致流一直堆积到服务器,从而导致流阻塞