每秒更新聊天

时间:2016-05-23 05:43:58

标签: android refresh chat page-refresh

我在实现它时正在制作聊天应用程序我需要自动更新消息,因为我正在使用asyntacks。为此,我怀疑每次我们都无法刷新asyntaks选项。那么,有没有办法或任何其他方法来刷新聊天活动的每一秒。

Chat.java

#include <QEventLoop>
#include <QTimer>

// ...

// In the main window constructor:
connect(myButton, SIGNAL(pressed()), this, SLOT(buttonPressed()));
connect(myButton, SIGNAL(released()), this, SLOT(buttonReleased()));

// ...

void MyMainWindow::buttonPressed()
{
    mutex.lock();

    // Here, I do the lengthy stuff, which is simulated by a loop
    // that waits some time.
    QEventLoop loop;
    QTimer::singleShot(1000, &loop, SLOT(quit()));
    loop.exec();

    mutex.unlock();
}

void MyMainWindow::buttonReleased()
{
    mutex.lock();

    // ... (some stuff)

    mutex.unlock();
}

2 个答案:

答案 0 :(得分:0)

每秒刷新聊天是非常糟糕的,因为你会失去很多服务器效率。你应该这样做:

  1. 从服务器下载所有邮件,
  2. 下载ID大于上一条消息的所有消息(例如,使用长轮询或轮询),
  3. 如果有任何消息,请更新列表。
  4. 或者使用Soket.io或weboskect。

    然后:

    1. 与服务器建立连接,
    2. 下载所有邮件,
    3. 如果您有新消息,服务器应发送信息,
    4. 如果您收到此信息,请下载ID大于上一封邮件的邮件。
    5. 我觉得聊天是个好主意。在这里,你有关于socket.io

      demo聊天

      玩得开心

答案 1 :(得分:0)

并不是每秒刷新一次聊天来检索消息的好方法。 这可能会使您的服务器过载,从而避免了过多的请求。

要实现实时聊天,如果您收到任何新消息,您的服务器应发送信息。

在客户端,您需要为此设置一个侦听器。触发侦听器后,您可以下载新消息。

ConnectyCube Android implementation为例:

IncomingMessagesManager incomingMessagesManager = chatService.getIncomingMessagesManager();

incomingMessagesManager.addDialogMessageListener(new ChatDialogMessageListener() {
    @Override
    public void processMessage(String dialogId, ConnectycubeChatMessage message, Integer senderId) {

    }

    @Override
    public void processError(String dialogId, ChatException exception, ConnectycubeChatMessage message, Integer senderId) {

    }
});