国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù)

這篇具有很好參考價值的文章主要介紹了C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

服務(wù)器端應(yīng)檢測到客戶端是否異常退出,因此本節(jié)來實現(xiàn)客戶端異常退出,項目流程見后文

一、客戶端異常退出業(yè)務(wù)流程

(1)在業(yè)務(wù)模塊定義處理客戶端異常退出的函數(shù)

(2)集群聊天服務(wù)器項目(八)提到,哈希表_userConnMap存儲用戶的id和通信連接,若客戶端異常退出,表示該客戶端登錄用戶已經(jīng)下線,那么需要對_userConnMap中對應(yīng)用戶的在線連接進(jìn)行刪除。由于_userConnMap是線程不安全的,操縱需加互斥鎖訪問。

(3)依次遍歷哈希表_userConnMap,判斷是否有通信連接同退出的客戶端連接一致

若一致,則依據(jù)通信連接對應(yīng)的用戶id,刪除_userConnMap中通信連接

由于客戶端異常退出,表示登錄用戶已經(jīng)下線,更新用戶狀態(tài)為offline

二、客戶端異常退出業(yè)務(wù)代碼實現(xiàn)

在include/server/chatservice.hpp中創(chuàng)建public公有權(quán)限函數(shù),處理客戶端異常退出服務(wù)

#ifndef CHATSERVICE_H
#define CHATSERVICE_H

#include <muduo/net/TcpConnection.h>
#include <unordered_map>//一個消息ID映射一個事件處理 
#include <functional>
#include <mutex>
using namespace std;
using namespace muduo;
using namespace muduo::net;

#include "usermodel.hpp"
#include "json.hpp"
using json = nlohmann::json;

//表示處理消息的事件回調(diào)方法類型,事件處理器,派發(fā)3個東西 
using MsgHandler = std::function<void(const TcpConnectionPtr &conn, json &js, Timestamp)>;

//聊天服務(wù)器業(yè)務(wù)類
class ChatService
{
public:
    //獲取單例對象的接口函數(shù)
    static ChatService *instance();
    //處理登錄業(yè)務(wù)
    void login(const TcpConnectionPtr &conn, json &js, Timestamp time);
    //處理注冊業(yè)務(wù)
    void reg(const TcpConnectionPtr &conn, json &js, Timestamp time);

    //處理客戶端異常退出
    void clientCloseException(const TcpConnectionPtr &conn);

    //獲取消息對應(yīng)的處理器
    MsgHandler getHandler(int msgid);
private:
    ChatService();//單例 

    //存儲消息id和其對應(yīng)的業(yè)務(wù)處理方法,消息處理器的一個表,寫消息id對應(yīng)的處理操作 
    unordered_map<int, MsgHandler> _msgHandlerMap;

    //存儲用戶的通信連接
    unordered_map<int,TcpConnectionPtr> _userConnMap;

    //定義互斥鎖,保證_userConnMap的線程安全
    mutex _connMutex;

    //數(shù)據(jù)操作類對象
    UserModel _userModel;
    offlineMsgModel _offlineMsgModel;

};

#endif

在chatservice.cpp中進(jìn)行實現(xiàn)

// 處理客戶端異常退出
void ChatService::clientCloseException(const TcpConnectionPtr &conn)
{
    User user;
    {
        lock_guard<mutex> lock(_connMutex);
        for (auto it = _userConnMap.begin(); it != _userConnMap.end(); it++)
        {
            if (it->second == conn)
            {
                user.setId(it->first);
                // 從map表中刪除用戶的連接信息
                _userConnMap.erase(it);
                break;
            }
        }
    }
    // 更新用戶的狀態(tài)信息
    if (user.getId() != -1)
    {
        user.setState("offline");
        _userModel.updateState(user);
    }
}

三、功能驗證

啟動ChatServer服務(wù)器程序

查看數(shù)據(jù)庫用戶當(dāng)前狀態(tài)

C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù),C++實現(xiàn)集群聊天服務(wù)器項目,c++,服務(wù)器,開發(fā)語言,數(shù)據(jù)庫,mysql

所有用戶均不在線

使用張三的賬號進(jìn)行登錄,可以發(fā)現(xiàn)張三登錄成功,底層數(shù)據(jù)庫顯示在線

C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù),C++實現(xiàn)集群聊天服務(wù)器項目,c++,服務(wù)器,開發(fā)語言,數(shù)據(jù)庫,mysql

C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù),C++實現(xiàn)集群聊天服務(wù)器項目,c++,服務(wù)器,開發(fā)語言,數(shù)據(jù)庫,mysql

張三用戶異常退出,可以看到成功捕獲到退出信息了,并在數(shù)據(jù)庫中進(jìn)行操作

C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù),C++實現(xiàn)集群聊天服務(wù)器項目,c++,服務(wù)器,開發(fā)語言,數(shù)據(jù)庫,mysql

查看數(shù)據(jù)庫,發(fā)現(xiàn)張三下線了

C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù),C++實現(xiàn)集群聊天服務(wù)器項目,c++,服務(wù)器,開發(fā)語言,數(shù)據(jù)庫,mysql

客戶端異常退出業(yè)務(wù)驗證成功!

如果有問題,還請及時聯(lián)系我,感謝大家的批評與指正!謝謝~

C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù),C++實現(xiàn)集群聊天服務(wù)器項目,c++,服務(wù)器,開發(fā)語言,數(shù)據(jù)庫,mysql

項目流程

1、項目環(huán)境搭建?

C++項目——集群聊天服務(wù)器項目(一)項目介紹、環(huán)境搭建、Boost庫安裝、Muduo庫安裝、Linux與vscode配置_c++集群聊天服務(wù)器-CSDN博客

2、Json第三方庫介紹

C++項目——集群聊天服務(wù)器項目(二)Json第三方庫-CSDN博客

3、muduo網(wǎng)絡(luò)庫介紹

C++項目——集群聊天服務(wù)器項目(三)muduo網(wǎng)絡(luò)庫-CSDN博客

4、MySQL數(shù)據(jù)庫創(chuàng)建

C++項目——集群聊天服務(wù)器項目(四)MySQL數(shù)據(jù)庫-CSDN博客

5、網(wǎng)絡(luò)模塊與業(yè)務(wù)模塊代碼編寫

C++項目——集群聊天服務(wù)器項目(五)網(wǎng)絡(luò)模塊與業(yè)務(wù)模塊-CSDN博客

6、MySQL模塊編寫

C++項目——集群聊天服務(wù)器項目(六)MySQL模塊-CSDN博客

7、Model層設(shè)計、注冊業(yè)務(wù)實現(xiàn)

C++項目——集群聊天服務(wù)器項目(七)Model層設(shè)計、注冊業(yè)務(wù)實現(xiàn)-CSDN博客

8、用戶登錄業(yè)務(wù)

C++項目——集群聊天服務(wù)器項目(八)用戶登錄業(yè)務(wù)-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-854021.html

到了這里,關(guān)于C++項目——集群聊天服務(wù)器項目(九)客戶端異常退出業(yè)務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • UE5 C++的TCP服務(wù)器與客戶端

    ?客戶端.h 需要在Build.cs中加入模塊:\\\"Networking\\\",\\\"Sockets\\\",\\\"Json\\\",\\\"JsonUtilities\\\" ?客戶端.cpp

    2024年01月18日
    瀏覽(83)
  • WPF真入門教程28--項目案例--MQTT服務(wù)器和客戶端

    WPF真入門教程28--項目案例--MQTT服務(wù)器和客戶端

    這個案例還是布局加視圖模型,樣式應(yīng)用,業(yè)務(wù)邏輯,該項目是一個mqtt服務(wù)器和客戶端的通信工具,這里不去分析mqtt的通信原理,關(guān)注在于wpf技能的應(yīng)用,能夠掌握這個例子,離項目開發(fā)也差不多了,只是沒有跟db打交道,本項目重點(diǎn)在于理解mvvm模式,開發(fā)環(huán)境依然是vs20

    2024年01月17日
    瀏覽(30)
  • C++集群聊天服務(wù)器 nginx+redis安裝 筆記 (中)

    C++集群聊天服務(wù)器 nginx+redis安裝 筆記 (中)

    一、nginx安裝 nginx: download?下載nginx安裝包 二、redis安裝 Install Redis on Linux | Redis 集群聊天服務(wù)器推薦和參考文章,下文部分文字來自這篇文章: 集群聊天服務(wù)器:三、集群代碼實現(xiàn)_網(wǎng)絡(luò)編程多服務(wù)端集群怎么實現(xiàn)-CSDN博客 https://blog.csdn.net/qq_42441693/article/details/129167974?spm=100

    2024年02月19日
    瀏覽(30)
  • Idea+maven+springboot項目搭建系列--2 整合Rabbitmq完成客戶端&服務(wù)器端消息收發(fā)

    Idea+maven+springboot項目搭建系列--2 整合Rabbitmq完成客戶端&服務(wù)器端消息收發(fā)

    前言:本文通過springBoot -maven 框架,對Rabbitmq 進(jìn)行整合,完成客戶端消息的發(fā)送和消費(fèi); 1 為什么要使用Rabbitmq: RabbitMQ 是一個可靠的、靈活的、開源的消息中間件,具有以下優(yōu)點(diǎn): 異步通信:RabbitMQ 支持異步通信,使得消息發(fā)送者和接收者能夠異步處理,提高了系統(tǒng)性能和

    2024年02月07日
    瀏覽(31)
  • cpp-httplib: 輕量級、高性能的C++ HTTP/HTTPS客戶端和服務(wù)器庫

    cpp-httplib 是一個輕量級且高效的 C++ HTTP/HTTPS 客戶端和服務(wù)器庫。它由 Hideaki Sone(yhirose)開發(fā),并在 MIT 許可下發(fā)布。該項目的主要目標(biāo)是提供一種簡單易用的方式,在 C++ 應(yīng)用程序中實現(xiàn) HTTP 和 HTTPS 功能。 項目倉庫地址:https://gitcode.com/yhirose/cpp-httplib cpp-httplib 可用于以下場

    2024年04月09日
    瀏覽(88)
  • 【手把手做ROS2機(jī)器人系統(tǒng)開發(fā)五】使用C++實現(xiàn)編寫簡單的服務(wù)器和客戶端

    【手把手做ROS2機(jī)器人系統(tǒng)開發(fā)五】使用C++實現(xiàn)編寫簡單的服務(wù)器和客戶端

    目錄 使用C++實現(xiàn)編寫簡單的服務(wù)器和客戶端 一、程序編寫 1、創(chuàng)建軟件包 ?2、編譯軟件包 3、軟件配置 4、服務(wù)器程序編寫 5、客戶端程序編寫 6、軟件包設(shè)置 7、設(shè)置編譯選項 二、程序測試 1、編譯程序 2、開啟節(jié)點(diǎn)測試運(yùn)行 3、執(zhí)行效果展示 ???????? 上一講我們講解了如

    2024年02月10日
    瀏覽(20)
  • SOAP學(xué)習(xí)之一:Visual C++創(chuàng)建簡單的客戶端--使用soap toolkit 3.0獲取UTC服務(wù)器時間

    初始接觸 XML及SOAP第一天,摸不著頭緒,看了很多文章,總結(jié)一下幾點(diǎn)心得,附一個小例子使用VC++控制臺程序獲取UTC服務(wù)器時間。 看到的資料VC++都是使用soap toolkit來使用SOAP,soap toolkit目前看最高版本應(yīng)該是3.0,但是微軟已經(jīng)不再對soap toolkit提供技術(shù)支持及更新,在微軟官網(wǎng)

    2024年02月09日
    瀏覽(22)
  • C++集群聊天服務(wù)器 muduo+nginx+redis+mysql數(shù)據(jù)庫連接池 筆記 (下)

    C++集群聊天服務(wù)器 muduo+nginx+redis+mysql數(shù)據(jù)庫連接池 筆記 (下)

    C++集群聊天服務(wù)器 網(wǎng)絡(luò)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項目 筆記 (上)-CSDN博客 https://blog.csdn.net/weixin_41987016/article/details/135991635?spm=1001.2014.3001.5501 C++集群聊天服務(wù)器 數(shù)據(jù)模塊+業(yè)務(wù)模塊+CMake構(gòu)建項目 筆記 (上)-CSDN博客 https://blog.csdn.net/weixin_41987016/article/details/136007616?spm=1001.2014.

    2024年02月19日
    瀏覽(33)
  • 服務(wù)器異步客戶端

    internal class MessageManagerT:SingletonMessageManagerT { ? ? Dictionaryint, ActionT MsgDic = new Dictionaryint, ActionT(); ? ? public void OnAddListen(int id,ActionT action) ? ? { ? ? ? ? if(MsgDic.ContainsKey(id)) ? ? ? ? { ? ? ? ? ? ? MsgDic[id] += action; ? ? ? ? } ? ? ? ? else ? ? ? ? { ? ? ? ? ? ? MsgDic.Add(id, ac

    2024年04月09日
    瀏覽(24)
  • ZeroTier客戶端連接服務(wù)器

    ZeroTier客戶端連接服務(wù)器 下載客戶端 https://www.zerotier.com/download/ 加入新的網(wǎng)絡(luò)(例如d5e04297a16fa690,由管理員提供) 管理員授權(quán)并告知服務(wù)器IP 測試連接:ping 服務(wù)器IP 使用putty, pycharm, vscode等工具連接即可 官方文檔 https://docs.zerotier.com/getting-started/getting-started 注: 若路由器無法

    2024年02月09日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包