我正在编写Java客户端和服务器,他们正在正确地相互交谈。但是,此时,客户端必须始终在收到消息之前向服务器发送消息 - 但我希望服务器能够在客户端没有要求的情况下发送消息。
在我的主要语言AS3中,我已经向套接字添加了一个事件监听器并以这种方式处理数据 - 但我似乎无法找到如何在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;}
但我想尽可能避免这种情况;我对线程并不太舒服,我希望尽可能简单。
答案 0 :(得分:1)
最简单的方法是使用线程。我至少有一个线程读取套接字,允许服务器随时向客户端发送消息。
混合响应和事件的问题是你的第一个块不起作用,因为“响应”可能是一个事件。
如果您不想使用线程,可以使用类似
的内容// simple but probably not a good idea.
public String send(String message) {
out.println(message);
try {
while(true) {
String line = in.readLine();
if (isEvent(line))
processEvent(line);
else
return line;
} catch (IOException ex) {
return "";
}
}
但是,它只会在发送请求时读取事件,并且如果不定期执行此操作,则可能导致流一直存储到服务器,导致它也被阻塞。