【问题标题】:client check if new data is available with httprequest客户端通过 httprequest 检查新数据是否可用
【发布时间】:2018-04-27 10:23:43
【问题描述】:

我目前正在为学校开发一个聊天项目,其中两个客户端可以通过 http 服务器发送消息。我已经可以使用聊天消息发送 POST 请求,并且服务器会保存它。

我现在的问题是客户需要知道是否有新的聊天消息可用。我试图这样做:

private void checkChat()
{
    String url = "http://"+serverip+":"+serverport+"/requests";
    while(verbunden==true)
    {
        try
        {
            URL requrl = new URL(url);
            HttpURLConnection con = (HttpURLConnection) requrl.openConnection();

            con.setRequestMethod("GET");

            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();
            while ((inputLine = in.readLine()) != null) 
            {
                    response.append(inputLine);
            }
            in.close();
            gui.writeChat(response.toString());
        }
        catch(Exception ex)
        {

        }

    }
}

但是当该方法被调用时,程序不再工作,因为我认为服务器被淹没了。

所以我现在的问题是:如何检查来自服务器的新聊天消息?我需要为此使用 httprequests,但我不知道如何。

【问题讨论】:

  • 我们有必要使用 HTTP 吗?因为Sockets 似乎是一种更好的方法。无论如何,你可以调试“当方法被调用时程序不再工作。”因为你似乎知道会发生什么? checkChat 怎么称呼?编辑:噢……while(true)。您可能希望在该循环中添加一个暂停,以防止它每毫秒执行一次。在收到响应的那一刻,发送下一个请求......如果它在 GUI 线程中运行,那么您将永远不会看到新消息。
  • @AxelH 感谢您的回答!是的,我们需要为此使用 http,但我也不知道如何使用套接字来实现。是的,我可以调试我的代码,但它只是一直循环,所以聊天框不会更新。我将尝试暂停 while 循环,但我仍然不知道如何在不淹没服务器的情况下检查新数据
  • Websockets 是用于聊天相关应用程序的方式。

标签: java http httprequest


【解决方案1】:

首先,您在循环中发送此请求:

while(verbunden==true)

但是您没有写任何暂停,因此一旦收到响应,就会发送下一个请求,这意味着可能每秒 100 个请求(基于响应时间)。

只需在循环中添加一个Thread.sleep(5000 /*5000ms*/); 即可添加一个小中断。

PS:您可以使用两个Socket 在服务器和客户端之间进行通信,这样服务器就可以通知客户端新消息。

【讨论】:

  • 非常感谢!现在它可以工作了。谢谢你的帮助,你帮了我很多:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多