小程式輕鬆實現IM即時通訊多人聊天室

来源:https://www.cnblogs.com/zegodeveloper/archive/2022/09/08/16665561.html
-Advertisement-
Play Games

IM多人聊天室功能簡介 ZIM SDK 提供多人房間聊天功能,支持用戶向房間內發送文本消息或自定義消息,實現了多人線上交流、同步分享。 多人房間聊天功能可應用於小班課或者會議室等場景,房間成員數量上限請參考 計費說明。 IM房間管理功能的前提條件 在實現“房間管理”功能之前,請確保: 已在 ZEGO ...


IM多人聊天室功能簡介

ZIM SDK 提供多人房間聊天功能,支持用戶向房間內發送文本消息或自定義消息,實現了多人線上交流、同步分享。

多人房間聊天功能可應用於小班課或者會議室等場景,房間成員數量上限請參考 計費說明

IM房間管理功能的前提條件

在實現“房間管理”功能之前,請確保:

實現IM多人聊天流程

用戶可以通過以下兩種方式,創建房間併進入房間。

  • 方式一:創建房間、加入房間:用戶 A 調用 createRoom 介面,傳入 ZIMRoomInfo 信息,即可創建並加入房間。其他用戶調用 joinRoom 介面,傳入由 A 創建的房間 roomID,即可加入房間。
  • 方式二:進入房間:用戶 X 調用 enterRoom 介面,傳入 ZIMRoomInfo 信息,如果 roomID 不存在,會自動創建一個房間然後進入。其他用戶需要調用 enterRoom 介面,傳入由 X 創建的房間 roomID,進入房間。

房間內的用戶,可以通過 sendRoomMessage 介面,向房間內發送消息,詳情請參考 收發房間消息

如果 roomID 已存在:

  • 調用 createRoom 介面,會返回相關錯誤碼,詳情請參考 常見錯誤碼
  • 調用 enterRoom 介面,會直接進入此房間內。

如果 roomID 不存在:

  • 調用 createRoom 介面,可以直接創建、並加入到此房間內。
  • 調用 enterRoom 介面,會直接創建一個房間、併進入到此房間內。

創建即時通訊多人聊天房間、加入聊天房間

以下流程中,我們以客戶端 A 創建並加入房間,客戶端 B 和其他客戶端加入房間為例。

下載.png

1. 創建多人聊天房間

客戶端 A 登錄後,創建一個房間,可以調用 createRoom 介面,傳入 ZIMRoomInfo 信息,即可創建並加入房間。同時可以通過錯誤碼 ZIMError 的參數值,判斷是否創建成功。相關錯誤碼請查看 常見錯誤碼

  • “roomID”、“roomName” 支持開發者自定義規則生成。建議開發者將 “roomID” 設置為一個有意義的值,可將其與自己的業務賬號系統進行關聯。
  • 調用 createRoom 介面創建房間後,會直接加入房間,無需再調用 joinRoom 介面加入房間。
var roomInfo = { roomID: '', roomName: '' };
zim.createRoom(roomInfo)
    .then(function ({ roomInfo }) {
        // 操作成功
    })
    .catch(function (err) {
        // 操作失敗
    });

2. 加入IM多人聊天房間

客戶端 B 和其他客戶端先後加入房間,可以調用 joinRoom 介面,傳入由 A 創建的房間 roomID,即可加入房間。同時可以通過錯誤碼 ZIMError 的參數值,判斷是否創建成功。相關錯誤碼請查看 常見錯誤碼

var roomID = '';
zim.joinRoom(roomID)
    .then(function ({ roomInfo }) {
        // 操作成功
    })
    .catch(function (err) {
        // 操作失敗
    });

3. IM聊天房間成員變動通知

當房間有其他成員加入時,將通過 on 的回調介面 roomMemberJoined,向其他已在成員發送消息通知。

例如,當客戶端 B 加入由 A 創建的房間時,A 將收到房間內成員變動的通知。

// 加入房間通知,通過該通知收到加入房間的用戶信息
zim.on('roomMemberJoined', function (zim, { roomID, memberList }) {
    console.log(roomID, memberList);
});

進入多人聊天房間

以下流程中,我們以客戶端 X 創建併進入房間,客戶端 Y 和其他客戶端直接進入房間為例。

下載2.png

  1. 客戶端 X 登錄後,調用 enterRoom 介面,傳入 ZIMRoomInfo 信息,進入房間;如果傳入的 roomID 不存在,將會自動創建一個房間併進入該房間。
  2. 客戶端 Y 及其他用戶登錄後,調用 enterRoom 介面,傳入由 X 創建的房間 roomID,直接進入房間。
  3. 房間內的用戶,同樣可以使用 on 的回調介面 roomMemberJoined 方法,實現對房間內成員加入的監聽。
var roomInfo = { roomID: '', roomName: '' };
zim.enterRoom(roomInfo)
    .then(function ({ roomInfo }) {
        // 操作成功
    })
    .catch(function (err) {
        // 操作失敗
    });

// 加入房間通知,通過該通知收到加入房間的用戶信息
zim.on('roomMemberJoined', function (zim, { roomID, memberList }) {
    console.log(roomID, memberList);
});

離開IM聊天房間

客戶端 B 如果想要離開房間,可以調用 leaveRoom 介面,傳入房間的 roomID,即可退出此房間;房間內的其他用戶可以通過 on 的回調介面 roomMemberLeft,收到成員變動通知。

離開房間後,將不能收到房間內的消息。

下載3.png

var roomID = '';
zim.leaveRoom(roomID)
    .then(function ({ roomID }) {
        // 操作成功
    })
    .catch(function (err) {
        // 操作失敗
    });
// 離開房間通知,通過該通知收到離開房間的用戶信息
zim.on('roomMemberLeft', function (zim, { roomID, memberList }) {
    console.log(roomID, memberList);
});

當所有成員離開房間後,房間將自動銷毀,同時支持設置房間延遲銷毀。

音視頻場景解決方案分享,更多詳情可搜索官網(https://zegoguanwang.datasink.sensorsdata.cn/t/pB)
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Math對象 Math對象,不是一個構造函數,所以我們不需要new 來調用,而是直接使用裡面的屬性和方法即可,它具有數學常數和函數的方法,跟數學相關的運算(求絕對值,取整,最大值等)可以使用Math中的成員。 1.Math絕對值和三個取整的方法: 2.Math隨機數方法 Math對象隨機數方法:ra ...
  • 每日3題 28 以下代碼執行後,控制臺中的輸出內容為? function showCase(value){ switch(value){ case 'A': console.log('case A'); break; case 'B': console.log('case B'); break; c ...
  • 多個元素的過渡 點擊打開視頻講解更加詳細 我們之後討論多個組件的過渡,對於原生標簽可以使用 v-if/v-else。最常見的多標簽過渡是一個列表和描述這個列表為空消息的元素: <transition> <table v-if="items.length > 0"> <!-- ... --> </ta ...
  • process-env 在使用vue框架時,經常用到的倆種環境,一種是開發環境,一種是生產環境。 平時開發使用的是開發環境,如果發佈到線上時,需要切換為線上環境。可以通過不同配置不同的運行命令來自動切換環境。 配置環境實現原理 實現原理是採用nodeJS的頂層對象中的process.env(進程環境 ...
  • 有時候想寫一個無關框架組件,又不想用原生或者 Jquery 那套去寫,而且還要避免樣式衝突,用 Web Components 去做剛覺就挺合適的。但是現在 Web Components 使用起來還是不夠靈活,很多地方還是不太方便的,如果能和 MVVM 搭配使用就好了。早在之前 Angular 就支持 ...
  • 時隔幾個月,拖拖拉拉的終於整理好了一份使用指南。下次終於可以甩個文檔連接了🤣,再也不用一個個解釋了。 感慨 隨隨便便做的一個主題,沒想到會有人使用。🤣因為沒有文檔,時不時有人會來問怎麼使用,無奈只有一個個郵件回覆告知。體會到開源不易,維護更不易🤣(在此對曾經使用過的開源庫表示感謝)。 以前主題 ...
  • JS第七種數據類型Symbol詳解 點擊打開視頻講解更加詳細 一、什麼是Symbol? Symbol是ES6中引入的一種新的基本數據類型,用於表示一個獨一無二的值。它是JavaScript中的第 七種數據類型,與undefined、null、Number(數值)、String(字元串)、Boolea ...
  • 函數:就是封裝了一段可以被重覆執行調用的代碼塊,目的就是讓大量的代碼重覆使用 函數的使用 分兩步:聲明函數和調用函數 函數的封裝 函數的封裝是把一個或者多個功能通過函數的方式封裝起來,對外只提供一個簡單的函數介面 函數的參數 形參和實參 形參和實參個數不匹配問題 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...