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 和其他客户端加入房间为例。

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 和其他客户端直接进入房间为例。

  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,收到成员变动通知。

离开房间后,将不能收到房间内的消息。

var roomID = '';
zim.leaveRoom(roomID)
.then(function ({ roomID }) {
// 操作成功
})
.catch(function (err) {
// 操作失败
});
// 离开房间通知,通过该通知收到离开房间的用户信息
zim.on('roomMemberLeft', function (zim, { roomID, memberList }) {
console.log(roomID, memberList);
});

当所有成员离开房间后,房间将自动销毁,同时支持设置房间延迟销毁。

小程序轻松实现IM即时通讯多人聊天室的更多相关文章

  1. java小程序---简陋版多人聊天室

    功能需求: 1 每运行一次主函数,创建一个客户端聊天界面; 2 客户端界面分三块,公屏(显示所有客户端发送的信息),私屏(用于输入个人想要发送的信息),发送按钮(点击一次,将客户端信息发送到服务端) ...

  2. iOS 即时通讯 + 仿微信聊天框架 + 源码

    这些你造吗? 即时通讯(IM),在IOS这片江湖里面已经算是一个老者了,我这小旋风也是在很早以前巡山的时候,就知道有即时通讯这个妖怪,以前也多多少少接触过一些,在造APP的时候用过,哎呀,说着说着就感 ...

  3. 即时通讯UI-聊天界面(UITableView显示左右两人聊天)

    目录 1.创建UITableView对象并设置相关属性 2.创建cellModel模型 //枚举类型 typedef enum { ChatMessageFrom = ,//来自对方的消息 ChatM ...

  4. 一步一步创建聊天程序2-利用epoll来创建简单的聊天室

    如图,这个是看视频时,最后的作业,除了客户端未使用select实现外,其它的要求都有简单实现. 服务端代码如下: #include <stdio.h> #include <strin ...

  5. Python编写基于socket的非阻塞多人聊天室程序(单线程&多线程)

    前置知识:socket非阻塞函数(socket.setblocking(False)),简单多线程编程 代码示例: 1. 单线程非阻塞版本: 服务端: #!/usr/bin/env python # ...

  6. 小程序:前端防止用户重复提交&即时消息(IM)重复发送问题解决

    背景: 最近参与开发的小程序,涉及到即时消息(IM)发送的功能: 聊天界面如下,通过键盘上的[发送]按钮,触发消息发送功能 问题发现: 功能开发完毕,进入测试流程:测试工程师反馈说: 在Android ...

  7. 如何基于IM即时通讯SDK从零开发仿微信聊天交友功能

    IM即时通讯技术的发展 IM即时通讯(Instant Messaging)是一种基于互联网的即时交流消息的业务. 实时聊天交互功能是市面上主流APP的重要功能之一,人们所熟悉的就是微信,QQ的聊天消息 ...

  8. [日推荐] 『闲聊助手』人工智能小程序,仅此一款!-极乐商店store.dreawer.com

    肾phone的siri有用过吗?小编无聊时就撩一下她!但有个问题就是要是没有肾phone在身边怎么撩???现在有伙伴@wx_Volcano_Li76 开发一款小程序,可以等同于siri,想什么时候撩就 ...

  9. 微信小程序周报(第十三期)-极乐商店(store.dreawer.com)出品

    重要:极乐商店域名变更:wxapp.dreawer.com/变更为store.dreawer.com/ 每周一笑 当年刚学打篮球的时候,疯狂地迷恋上了乔丹,然后迷恋上了NIKE,更熟记了NIKE的那句 ...

  10. 开发一款即时通讯App,从这几步开始

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云视频发表于云+社区专栏 关注公众号"腾讯云视频",一键获取 技术干货 | 优惠活动 | 视频方案 " ...

随机推荐

  1. ASP.NET Core相关下载资源汇总

    1.Net.6的Host Bundle的下载地址(IIS)服务配套组件: https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0 2.docker ...

  2. MyBatis常见面试题:#{}和${}的区别是什么?

      经常碰到这样的面试题目:#{}和${}的区别是什么?   正确的答案是:#{}是预编译处理,${}是字符串替换.   备注:${}是插值,插值的新认识见:http://www.mybatis.cn ...

  3. 如何通过Cgroups机制实现资源限制?

    1.什么是Cgroups? 在说Cgroups之前,我们先说说容器的"限制"问题. 我们知道通过Linux Namespace技术,可以实现容器中的进程看不到别的容器资源,但是有一 ...

  4. snmp总结二:MIB语法

    snmp总结二:MIB语法 MIB(Management Information Base,管理信息库)是 MO(Managed Object 管理对象)定义的集合.MIB 文件是按照 ASN.1 定 ...

  5. UFT 的三种方法获取时间

  6. pg 判断表或者模式是否存在 满足条件后执行创建表sql

    记录一下. 是这么个事,执行初始化脚本的时候报错了 ,原因是引用了其他模式下的表,但是这个模式还没有创建,就导致我有个视图无法创建. 其实这玩意有两个方法,要不然就判断下其他模式下的脚本是否存在,存在 ...

  7. 基于 swoole 下 异步队列和毫秒定时任务 API

    说明 1.在 Server 程序中如果需要执行很耗时的操作,比如一个聊天服务器发送广播,Web 服务器中发送邮件.如果直接去执行这些函数就会阻塞当前进程,导致服务器响应变慢. Swoole 提供了异步 ...

  8. C# 获取字符串 字节的长度

    https://www.cnblogs.com/xiarongrong/p/5168713.html /// <summary>        /// 获取字符串字节长度        / ...

  9. R语言包学习之tidyr包:数据结构重构

    ↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ tidyr包 tidyr包主要涉及的功能和函数有: 1)缺失值的简单补齐 2)长表变宽表与宽表变长表 gather-把宽度较大的 ...

  10. leetcode 1405

    简介 贪心算法 思路 填2个数量最多的字母,如果下一次该字母数量还是最多的,填1个数量次多的字母 code class Solution1405 { public: string longestDiv ...