繁体   English   中英

我可以将Java的BufferedReader与事件侦听器一起使用,而不是while(true)吗?

[英]Can I use Java's BufferedReader with an event listener rather than while(true)?

我正在编写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;}但我想尽可能避免这种情况。 我对线程不太满意,我想使其尽可能简单。

最简单的方法是使用线程。 我将至少有一个线程读取套接字,该线程允许服务器随时向客户端发送消息。

响应和事件混合的问题在于您的第一个程序段将不起作用,因为“响应”可能是事件。

如果您不想使用线程,则可能会遇到类似

// 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 "";
    }
}

但是,它将仅在发送请求时读取事件,如果不定期执行此操作,则可能导致流完全阻塞到服务器的整个路径,并导致其也被阻塞。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM