QT使用websocket進行長連接


一般我們用的最多的就是http請求,但是頻繁的請求可能對服務造成的壓力很大,所以今天談談websocket長連接,一句話:簡單

1、什么是長連接?

A:一次請求連接,終身使用,就可以長久的保持信息的交互,除非服務掛了

2、QT里面是如何使用websocket進行長連接的

①首先在pro文件里面添加QT += websockets

②#include <QWebSocket>

③初始化

_pdataRecvWS = new QWebSocket();
connect(_pdataRecvWS,SIGNAL(disconnected()),this,SLOT(onDisconnected()),Qt::AutoConnection);
connect(_pdataRecvWS,SIGNAL(textMessageReceived(QString)),this,SLOT(onTextReceived(QString)),Qt::AutoConnection);
connect(_pdataRecvWS,SIGNAL(connected()),this,SLOT(onConnected()),Qt::AutoConnection);
connect(_ptimer,SIGNAL(timeout()),this,SLOT(reconnect()),Qt::AutoConnection);
_pdataRecvWS->open(QUrl("ws://localhost:8080"));

④對應的槽函數

//斷開連接會觸發這個槽函數
void MainWindow::onDisconnected()
{
    _ptimer->start(3000);
    ui->textEdit->append("websocket is disconnected");
}
//連接成功會觸發這個槽函數
void MainWindow::onConnected()
{
    _ptimer->stop();
    ui->textEdit->append("connect successful");
}
//收到服務發來的消息會觸發這個槽函數
void MainWindow::onTextReceived(QString msg)
{
    ui->textEdit->append("textReceiveString" + msg);
}
//斷開連接會啟動定時器,觸發這個槽函數重新連接
void MainWindow::reconnect()
{
    ui->textEdit->append("websocket reconnected");
    _pdataRecvWS->abort();
    _pdataRecvWS->open(QUrl("ws://localhost:8080"));
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM