当前位置:首页 » 存储配置 » 存储好友关系

存储好友关系

发布时间: 2022-11-30 00:22:50

Ⅰ 补齐短板-开源IM项目OpenIM关于初始化/登录/好友接口文档介绍

OpenIM文档方面的建设一直远远落后于开发, 也经常被开发者诟病,在接下来一周的时间里,我们重点补齐文档,让开发者更轻松接入。由于app sdk底层都是go来实现,所以本文先写一个模板和框架,在接下来的时间里,会有iOS、Android、Flutter、Uniapp、jssdk同事补充具体的细节,并更新到官网

![0](C:\Users\Administrator\Desktop\OpenIM\官网相关\技术文章\6-25\0.png)

## 初始化及登录

初始化并登录成功回调,是正常使用OpenIM 服务的前提

| SDK              | 描述                                                        |

| :--------------- | :----------------------------------------------------------- |

| [Login]          | 登录,如果登录成功,必须退出登录才能再次执行登录操作        |

| [Logout]        | 退出登录                                                    |

| [GetLoginStatus] | 获取登录状态, 101:登录成功,  102:登陆中,  103:登录失败,  201:退出登录 |

| [GetLoginUser]  | 获取当前登录用户UserID,此时用户登录状态未知                |

| [initSDK]        | 初始化 SDK,整个生命周期执行一次,登录相关监听介绍如下:    |

OpenIM和调用方利用监听回调机制,和调用方信息互通,把登录状态通过异步回调方式即时传递给调用方,确保信息及时传达而不阻塞其主线程。

## 监听说明

| 登录相关监听        | 回调描述                                                    |

| :------------------- | :----------------------------------------------------------- |

| [OnConnecting]      | 连接中,在连接后台时(包括重连)回调                        |

| [OnConnectSuccess]  | 连接成功                                                    |

| [OnConnectFailed]    | 连接失败,如果因网络连接失败会重连,其他情况不重连          |

| [OnKickedOffline]    | 被踢下线,可能由于多端登录策略所致,或后台管理员强制其退出登录 |

| [OnUserTokenExpired] | 检测token过期回调                                            |

## 调用流程

OpenIM调用流程分为如下几步:

(1)初始化:在整个生命周期执行一次

(2)设置监听:包括群组监听,好友监听,用户监听,消息及会话监听,这些监听会在其他章节中描述

(3)登录:登录回调成功后再执行其他操作,否则可能出现资源加载未完成的错误

(4)收发消息等操作;

## 好友管理相关接口

OpenIM提供好友关系托管,比如好友申请,同意,以及好友获取等,OpenIM在客户端本地存储好友关系,并结合消息通知机制,按需调用后台接口,确保本地和服务端数据一致。同时利用监听机制,把数据变化通过异步回调传达调用方。OpenIM在收发消息时,默认不检查好友关系,您可以在配置文件中自行修改。OpenIM好友关系是双向关系,A添加B为好友后,则A在B的好友列表中,B也在A的好友列表中,A删除B,仅仅只是删除A的好友列表,而B的好友列表不受影响。同样,黑名单也类似。

| SDK                            | 描述                                                    |

| :----------------------------- | :------------------------------------------------------- |

| [GetDesignatedFriendsInfo]    | 获取指定好友的信息                                      |

| [GetFriendList]                | 获取所有的好友列表                                      |

| [SearchFriends]                | 通过关键词搜索好友                                      |

| [CheckFriend]                  | 检查是否好友关系                                        |

| [AddFriend]                    | 发起添加好友请求                                        |

| [SetFriendRemark]              | 设置好友备注                                            |

| [DeleteFriend]                | 删除好友(单向删除)                                    |

| [GetRecvFriendApplicationList] | 获取我收到的添加好友申请列表                            |

| [GetSendFriendApplicationList] | 获取我发起的的添加好友申请列表                          |

| [AcceptFriendApplication]      | 同意好友申请                                            |

| [RefuseFriendApplication]      | 拒绝好友申请                                            |

| [SetFriendListener]            | 设置好友、黑名单相关监听,用于UI层实时感知数据变化并刷新 |

## 监听说明

好友监听器的作用:调用方设置好友监听,好友关系的变化会通过OpenIM消息机制实时同步到需要感知的在线用户,包括用户的其他端,调用方根据回调事件做相关的数据处理。

比如用户B在Android端添加用户A为好友,用户A(所有在线的终端)收到B的好友申请,则A调用GetRecvFriendApplicationList获取收到的好友申请列表,刷新界面。同时,用户B在线其他的终端比如PC端也会收到通知,B调用GetSendFriendApplicationList获取发起的好友申请列表,刷新B发出的好友申请列表。

当然也可以利用回调的参数信息,做增量处理,而不用获取全量的好友申请列表。

以用户B申请添加用户A为例

| 好友及黑名单监听              | 描述                                                |

| :---------------------------- | :--------------------------------------------------- |

| [OnFriendApplicationAdded]    | 好友申请列表增加,主动发起者和被动添加者会收到      |

| [OnFriendApplicationDeleted]  | 好友申请列表删除,主动删除者会收到                  |

| [OnFriendApplicationAccepted] | 好友申请被同意,主动发起者和被动添加者会收到        |

| [OnFriendApplicationRejected] | 好友申请被拒绝,主动发起者和被动添加者会收到        |

| [OnFriendAdded]              | 好友增加,用户好友增加时会收到                      |

| [OnFriendDeleted]            | 好友删除,用户好友减少时会收到                      |

| [OnFriendInfoChanged]        | 好友信息改变,用户好友信息(比如昵称等)改变时会收到 |

| [OnBlackAdded]                | 黑名单增加,用户黑名单增加时会收到                  |

| [OnBlackDeleted]              | 黑名单移除,用户黑名单减少时会收到                  |

## 项目介绍

OpenIM继续领跑开源IM领域,在广大开发者的支持下,目前github star突破9k。在数据泄露、信息外泄、隐私滥用的时代,IM私有化部署需求旺盛。其中,政企协同办公对IM需求猛增,随着信息化技术的迭代升级以及信创产业加速落地和实践,协同办公软件的发展潜力将进一步被释放。“安全可控“逐步成为第一要素。对于社区交友领域,暴露出的隐私安全问题越来越多,私有化部署确保用户数据不泄露。

OpenIM从服务端到客户端SDK开源即时通讯(IM)整体解决方案,可以轻松替代第三方IM云服务,打造具备聊天、社交、办公功能的app。

github地址: https://github.com/OpenIMSDK/Open-IM-Server

开发者中心:https://doc.rentsoft.cn/#/

## OpenIM团队

创始团队来自资深IM技术团队,我们致力于用开源技术创造服务价值,打造轻量级、高可用的IM架构,开发者只需简单调用 SDK,即可在应用内构建多种即时通讯及实时音视频互动场景。OpenIM优势:开源,安全,可靠,低成本。对于信息安全重视的电子政务,企业协同办公,OpenIM都是非常好的选择。

从公司成立之初就将“开源”作为核心战略来推进,开源充分体现了自由、平等、分享的互联网精神。

OpenIM邀请全球技术极客参与技术优化,让开发者轻松集成,让每一个应用都具备IM功能,同时考虑企业的接入成本、服务器资源以及最重要的数据安全性和私密性。

Ⅱ 微信卸载重新安装后,微信好友还在吗

微信的好友关系是存储在微信的服务器的,不会随着你的手机端微信卸载就没了,不管怎么卸载,在别的手机微信登录相同的账号,你的好友都在,放心吧,丢失的都是你的聊天记录,但你提前备份了也就没什么损失了,祝你好运!

Ⅲ 如何维持朋友关系

1、真诚

真诚是人际交往的最基本的要求,所有的人际交往的手段、技巧都应该是建立在真诚交往的基础之上的。尔虞我诈的欺骗和虚伪的敷衍都是对人际关系的亵渎。真诚不是写在脸上的,而是发自内心的,伪装出来的真诚比真正的欺骗更令人讨厌。

任何人在人际交往过程中都有明显的对自我价值感的维护的倾向。例如,当我们取得了成绩时,我们会解释为这是自己的能力优于别人的缘故;当别人取得了成绩而我们没有取得成绩时,我们就会解释为别人仅仅是机遇好而已。这样的解释就不至于降低自我的价值感,伤及自尊心。

Ⅳ 各位大拿,我最近想做一个类似旺旺的聊天工具,但是现在困惑于旺旺中好友关系,聊天存储,好友信息存储!

没做过,帮你猜测一下。
1.好友关系应该是存储到数据库里边的,这个就是一个分类,应该不难吧。
2.好友信息只需要显示少量的信息就可以,除非单独查看
3.我看现在聊天记录一般是存储在本地的机器的,qq会员好像是存到服务器的

Ⅳ 好友关系的多对多表格

好友关系建立一个表friends,用户信息另外建一个表person. friends里就只有uid,friend_id两个字段,分别代表一个用户和它的一个好友的ID。具体的用户信息就存储在person表中,例如用户ID、用户名、生日等详细信息。表person和表friends可以通过friends的uid或friend_id和表person的ID字段关联起来。

Ⅵ 如何设计数据结构和算法,计算并存储六度好友关系

数据结构的存储结构是和相应的数据在内存中的物理地址之间的关系有关。而逻辑结构只是描述数据之间的关系(三大逻辑结构的一种)。举例说,线性表(元素之间的逻辑关系是线性的)可以是顺序存储的方式

Ⅶ 社交网络如何设计存储好友关系的数据库的

社交网络,他们都有,各自的数据库来对你的,各个数据信息,来进行独立的储存,所以好友关系也是他们数据库中的一条信息而已

Ⅷ 图的表示:如何存储微博、微信等社交网络中的好友关系

x博中,两个人可以互相关注,互加好友,那如何存储这些社交网络的好友关系呢?

这就要用到:图。

和树比起来,这是一种更加复杂的非线性表结构。

树的元素称为节点,图中元素叫作顶点(vertex)。图中的一个顶点可以与任意其他顶点建立连接关系,这种建立的关系叫作边(edge)。

社交网络就是典型的图结构。

把每个用户看作一个顶点。如果两个用户之间互加好友,就在两者之间建立一条边。
所以,整个微信的好友关系就可用一张图表示。
每个用户有多少个好友,对应到图中就叫作顶点的度(degree),即跟顶点相连接的边的条数。

不过微博的社交关系跟微信还有点不同,更复杂一点。微博允许单向关注,即用户A关注用户B,但B可不关注A。

这就引入边的“方向”。

A关注B,就在图中画一条从A到B的带箭头的边,表示边的方向。A、B互关,就画一条从A指向B的边,再画一条从B指向A的边,这种边有方向的图叫作“有向图”。边没有方向的图也就叫“无向图”。

无向图中有“度”:一个顶点有多少条边。
有向图中,把度分为:

QQ社交关系更复杂,不仅记录用户之间的好友关系,还记录了两个用户之间的亲密度,如何在图中记录这种好友关系亲密度呢?
这就要用到带权图(weighted graph),每条边都有个权重(weight),可以通过这个权重来表示QQ好友间的亲密度。

最直观的一种存储方法,邻接矩阵(Adjacency Matrix)。

依赖一个二维数组:

无向图,若A[i][j]==1,则A[j][i]==1。实际上,只需存储一个即可。即无向图的二维数组,如果将其用对角线划分为上下两部分,则只需利用上或下面这样一半空间就够了,另外一半其实完全浪费。
如果存储的是稀疏图(Sparse Matrix),即顶点很多,但每个顶点的边并不多,则更浪费空间。
如微信有好几亿用户,对应到图就是好几亿顶点。但每个用户好友并不很多,一般也就三五百个而已。如果我们用邻接矩阵来存储,那绝大部分的存储空间都被浪费了。

但这也并不是说,邻接矩阵的存储方法就完全没有优点。首先,邻接矩阵的存储方式简单、直接,因为基于数组,所以在获取两个顶点的关系时,就非常高效。其次,用邻接矩阵存储图的另外一个好处是方便计算。这是因为,用邻接矩阵的方式存储图,可以将很多图的运算转换成矩阵之间的运算。比如求解最短路径问题时会提到一个Floyd-Warshall算法,就是利用矩阵循环相乘若干次得到结果。

针对上面邻接矩阵比较浪费内存空间,另外一种图存储,邻接表(Adjacency List)。

有点像散列表?每个顶点对应一条链表,链表中存储的是与这个顶点相连接的其他顶点。图中画的是一个有向图的邻接表存储方式,每个顶点对应的链表里面,存储的是指向的顶点。对于无向图来说,也是类似的,不过,每个顶点的链表中存储的,是跟这个顶点有边相连的顶点,你可以自己画下。

如上图示例,若要确定是否存在一条从顶点2到顶点4的边,就要遍历顶点2的链表,看其中是否存在顶点4,而链表存储对缓存不友好。所以邻接表查询两个顶点之间的关系较为低效。

基于链表法解决冲突的散列表中,若链过长,为提高查找效率,可将链表换成其他更高效数据结构,如平衡二叉查找树。
邻接表长得很像散列。所以,也可将邻接表同散列表一样进行“优化”。

可将邻接表中的链表改成平衡二叉查找树。实际可选用红黑树。即可更快速查找两个顶点之间是否存在边。
这里的二叉查找树也可换成其他动态数据结构,如跳表、散列表。
还可将链表改成有序动态数组,通过二分查找快速定位两个顶点之间是否存在边。

虽然微博有向图,微信是无向图,但对该问题,二者思路类似,以微博为例。

数据结构服务于算法,选择哪种存储方法和需支持的操作有关。
对于微博用户关系,需支持如下操作:

因为社交网络是一张稀疏图,使用邻接矩阵存储比较浪费存储空间。所以,这里采用邻接表。

但一个邻接表存储这种有向图也是不够的。查找某用户关注了哪些用户很容易,但若想知道某用户都被哪些用户关注了,即粉丝列表就没法了。

因此,还需一个逆邻接表,存储用户的被关注关系:

基础的邻接表不适合快速判断两个用户是否为关注与被关注关系,所以进行优化,将邻接表的链表改为支持快速查找的动态数据结构。

因需按照用户名称首字母排序,分页获取用户的粉丝列表或关注列表,跳表最合适:插入、删除、查找都非常高效,时间复杂度 ,空间复杂度稍高,是 。
跳表存储数据先天有序,分页获取粉丝列表或关注列表,非常高效。

对小规模数据,如社交网络中只有几万、几十万个用户,可将整个社交关系存储在内存,该解决方案没问题。

可通过哈希算法等数据分片方案,将邻接表存储在不同机器:
如下图,在机器1上存储顶点1,2,3的邻接表,在机器2上,存储顶点4,5的邻接表。逆邻接表的处理方式也一样。当要查询顶点与顶点关系的时候,我们就利用同样的哈希算法,先定位顶点所在的机器,然后再在相应的机器上查找。

还能借助外部存储(比如硬盘),因为外部存储的存储空间比内存多很多:
如用下表存储这样一个图。为高效支持前面定义的操作,可建多个索引,比如第一列、第二列,给这两列都建立索引。

Ⅸ 用户的好友关系,在数据库里怎么存储

1、使用冗余,每个人的好友信息都在数据库中有存储,就是你说的记录一对一关系
2、数据缓存到内存,数据访问很快
3、状态信息修改异步,比如一个人登陆了,他的好友不是马上就知道,中间间隔几秒也没有关系
4、数据可能不放在关系数据库中,可能使用nosql数据库,比如mongodb,bigtable,cassandra等
5、facebook,twitter就是用类似的思想

热点内容
华为手机的自带铃声文件夹 发布:2024-05-02 07:20:14 浏览:501
xp系统开机密码怎么设置 发布:2024-05-02 06:49:48 浏览:759
柱加密区公式 发布:2024-05-02 06:40:19 浏览:4
java字节转换 发布:2024-05-02 06:40:11 浏览:687
用c语言做的程序 发布:2024-05-02 06:26:10 浏览:325
解压用流量 发布:2024-05-02 06:21:46 浏览:316
云购源码系统 发布:2024-05-02 06:12:52 浏览:105
电脑如何进行安卓升级 发布:2024-05-02 06:10:08 浏览:37
元龙第5集免费看完整版缓存 发布:2024-05-02 06:03:47 浏览:668
脚本宣传片 发布:2024-05-02 05:56:26 浏览:570