一种基于P2P即时通信的群聊实现方法与流程

文档序号:19149169发布日期:2019-11-15 23:52阅读:406来源:国知局
一种基于P2P即时通信的群聊实现方法与流程

本发明属于即时通信技术领域,涉及有一种基于p2p的即时通信方法,具体地说是一种基于p2p即时通信的群聊实现方法。



背景技术:

对等网络,即对等计算机网络,是一种在对等者(peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。"peer"在英语里有"对等者、伙伴、对端"的意义。因此,从字面上,p2p可以理解为对等计算或对等网络。其可以定义为:网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源、服务和内容的提供者(server),又是资源、服务和内容的获取者(client)。

在p2p网络环境中,彼此连接的多台计算机之间都处于对等的地位,各台计算机有相同的功能,无主从之分,一台计算机既可作为服务器,设定共享资源供网络中其他计算机所使用,又可以作为工作站,整个网络一般来说不依赖专用的集中服务器,也没有专用的工作站。网络中的每一台计算机既能充当网络服务的请求者,又对其它计算机的请求做出响应,提供资源、服务和内容。通常这些资源和服务包括:信息的共享和交换、计算资源(如cpu计算能力共享)、存储共享(如缓存和磁盘空间的使用)、网络共享、打印机共享等。

而现有的即时通信技术领域,p2p没有得到真正的应用和实施,例如qq或微信的即时通信仍然为目前网络中占据主导地位的客户端/服务器(client/server)结构(也就是www所采用的结构方式),其群聊是的信息通信采用消息广播式,这种通信方式方向性不明确,不能实现具有目标性、指向性的信息发送。而p2p与客户端/服务器的一个本质区别是,整个网络结构中不存在中心节点(或中心服务器)。正因为p2p结构众多优势(每一个节点(peer)大都同时具有信息消费者、信息提供者和信息通讯等三方面的功能。从计算模式上来说,p2p打破了传统的client/server(c/s)模式,在网络中的每个节点的地位都是对等的。每个节点既充当服务器,为其他节点提供服务,同时也享用其他节点提供的服务),更加迫切地需要在即时通信,尤其是群聊技术领域得到应用,以填补技术空白。



技术实现要素:

本发明为了解决上述问题,设计了一种基于p2p即时通信的群聊实现方法,该方法建立了一种树型网络拓扑结构来完成基于p2p网络的群聊、群消息的通信,摒弃了现有的即时通信群聊中用的广播式信息发布方式,而使得消息传输方向性更加明确,信息传输更加高效。

本发明采用的技术方案是:一种基于p2p即时通信的群聊实现方法,该方法是在p2p社交网络中的用户节点间已建立好友关系的基础上进行的,关键是:所述方法是基于树型网络拓扑结构,包括群创建、信息同步与群消息传输步骤,所述群创建步骤包括:

1-1)用户节点a发起建立群操作,系统自动生成群id及群名称,用户节点a即为所建立的群的根节点;

1-2)群的根节点作为邀请节点,跳至步骤1-3);

1-3)邀请节点发送群邀请请求至自己的好友,群邀请请求报文中包括群的id、名称及自定义的描述信息,好友收到群邀请请求报文后,向邀请节点回复是否同意入群的信息,如果是,则跳至步骤1-4);如果否,跳至步骤1-8);

1-4)判断邀请节点是否为根节点,如果是,则邀请节点将受邀节点加入至自己的群成员列表、子节点列表以及元首节点列表中,受邀节点将邀请节点加入至自己的父节点列表中,跳至步骤1-5);如果否,则邀请节点将回复同意入群的受邀节点加入至自己的群成员列表、子节点列表中,受邀节点将邀请节点加入至自己的父节点列表中,跳至步骤1-5);

1-5)邀请节点公告受邀节点加入群聊的通知,并发送群成员列表和元首节点列表至受邀节点,收到公告信息的节点更新自己的群成员列表,子节点是否发送群邀请请求至自己的好友,如果是,则跳至步骤1-3);如果否,则跳至步骤1-6);

1-6)子节点上线,向其在线的父节点发送上线通知,父节点将该上线子节点添加至自己的临时子节点列表中,并且同步群信息给子节点,子节点将该在线的父节点添加至自己的临时父节点列表中,并发送群成员上线通知;

1-7)群消息传输;

1-8)结束。

进一步地,步骤1-6)中在线的父节点的查找方法包括如下步骤:

2-1)上线的子节点由近及远依次向其n(n为大于等于1的整数)代以上父节点发送ping包探测其否在线,如果检测到有在线的父节点,则跳至步骤2-2);如果未检测到,则将元首节点列表中的元首节点作为父节点,跳至步骤2-2);

2-2)向父节点发送上线通知,父节点对子节点进行身份验证,验证该子节点是否存在于群成员列表中,如果存在,则同步群信息给子节点,父节点将该子节点更新至自己的临时子节点列表中,子节点将该父节点更新至自己的临时父节点列表中,跳至步骤2-3);如果不存在,则跳至步骤2-3);

2-3)结束。

进一步地,步骤2-2)所述的父节点将该子节点更新至自己的临时子节点列表中,子节点将该父节点更新至自己的临时父节点列表中之后,还进行如下步骤:

3-1)上线的子节点和其临时父节点列表中的节点每间隔时间t进行一次心跳,如果时间s内没有收到心跳反馈信息,跳至步骤3-2);如果时间s内收到心跳反馈信息,则跳至步骤3-3),其中t>s;

3-2)判断临时父节点列表中是否为空,如果否,则从临时父节点列表中移除该父节点信息,如果为空,则重复所述步骤2-1);

3-3)结束。

进一步地,所述的同步群消息的内容包括子节点离线时群中所发的群的名称、公告、群成员列表、元首节点列表、父节点列表以及群历史信息。

进一步地,所述的群消息传输包括如下步骤:

5-1)发信节点发送的消息包含有消息id、消息内容;收信节点收到群消息后记录该消息id并为该消息设置一个过期清除时间t,跳至步骤5-2);

5-2)收信节点在自己的消息列表中查找该消息id,如果有,则删除该消息;否则,将该消息转发给除发信节点之外的自己的临时子节点和临时父节点。

本发明的有益效果在于:1、p2p对等网络应用于即时通信的群聊技术领域,打破了传统的client/server(c/s)模式,使得在网络中的每个节点的地位都是对等的。每个节点既充当服务器,为其他节点提供服务,同时也享用其他节点提供的服务),避免了通信过程中对服务器的过分依赖而造成的服务器成为通信瓶颈的种种不断,填补技术空白。2、摒弃了传统的群聊中的消息广播模式,而使得消息传输的目标节点更加明确,信息传输更加高效。3、本发明方法采用的树型拓扑结构使得系统性能更加稳定,维护更加简单。

附图说明

图1为本发明实施例所建立的群的树型网络拓扑结构示意图。

图2为图1中父节点b离线,m和n直接和a建立连接的示意图。

图3是图1中根节点a离线,元首节点b、c、d相互建立连接的示意图。

具体实施方式

下面结合附图和实施例对本发明进行详细说明。

本发明在p2p网络中实现群聊,前提条件需要完成p2p的单聊功能,即p2p网络中任意两个用户可以通过自己的id标识进行通信,本发明方法通过群的创建管理,消息传输,信息同步3个部分阐述。

本发明方法中节点加入群聊需要通过已经在群聊中的好友邀请来完成的。根据群成员加入群聊的这种层级关系,本方法使用一种树型网络拓扑结构来管理群和完成群消息的传输。本发明方法为群中的成员定义了如下角色(参见图1):

根节点:群的创建者,如节点a

元首节点:根节点邀请加入的节点,如节点b、c、d

父节点:节点b邀请的节点m和n,节点b是节点m和n的父节点

叶子节点:没有任何子节点的节点,如节点m、n、c、d。

步骤1创建群(以创建图1所示的群为例):用户节点a创建一个“xxx讨论群”

步骤1.1用户节点a创建一个新的群,生成唯一的群id(随机生成长度为n的随机数),群的名称为“xxx讨论群”。

步骤1.2用户节点a作为“xxx讨论群”的根节点,同时拥有了群的管理权限,包括但是不限于改群昵称,公告,踢出成员,禁言,以及解散转让群

步骤2用户节点a邀请自己的好友节点b,c,d加入

步骤2.1用户节点a向好友节点b,c,d发送群邀请请求,群邀请请求报文中包括群的id,名称,以及自定义的描述信息。

步骤2.2假如用户节点b、c、d同意加入“xxx讨论群”则向节点a发送同意入群回复,并进行步骤2.3;否则发送回复拒绝加入该群聊,结束。

步骤2.3邀请节点即用户节点a是否为根节点,如果是,则邀请节点将受邀节点即用户节点b、c、d加入至自己的群成员列表、子节点列表以及元首节点列表中,受邀节点将邀请节点(即用户节点b将用户节点a、用户节点c将用户节点a、用户节点d将用户节点a)加入至自己的父节点列表中,跳至步骤2.4);如果否,则邀请节点(即用户节点a)将回复同意入群的受邀节点(即用户节点b、c、d)加入至自己的群成员列表、子节点列表中,受邀节点将邀请节点(即用户节点b将用户节点a、用户节点c将用户节点a、用户节点d将用户节点a)加入至自己的父节点列表中,跳至步骤2.4);

步骤2.4邀请节点公告受邀节点加入群聊的通知,并发送群成员列表和元首节点列表至受邀节点,收到公告信息的节点更新自己的群成员列表,子节点(即用户节点b、c、d)是否发送群邀请请求至自己的好友,如果是,则子节点作为邀请节点向好友发送群邀请请求,例如节点b的好友的节点m、n同意加入本群,则节点b作为邀请节点向节点m、n发送群邀请请求,节点m、n向节点b发送同意入群回复,跳至步骤2.3;如果否,例如节点c、d未发送邀请请求至自己的好友,则跳至步骤2.5;

步骤2.5子节点上线,查找其在线的父节点,上线的子节点由近及远依次向其n(n为大于等于1的整数)代以上父节点发送ping包探测其否在线,如果检测到有在线的父节点,则向其在线的父节点发送上线通知,父节点将该上线子节点添加至自己的临时子节点列表中,并且同步群信息(同步群消息的内容包括子节点离线时群中所发的群的名称、公告、群成员列表、元首节点列表、父节点列表以及群历史信息)给子节点,子节点将该在线的父节点添加至自己的临时父节点列表中,并发送群成员上线通知(如图2所示,父节点a离线,用户节点m、n直接和a建立连接);如果未检测到,则将元首节点列表中的在线的元首节点作为在线的父节点,向其发送上线通知,元首节点将该上线子节点添加至自己的临时子节点列表中,并且同步群信息给子节点,子节点将该在线的元首节点添加至自己的临时父节点列表中,并发送群成员上线通知(如图3所示,根节点a离线,元首节点b、c、d相互建立连接);

另外,上线的子节点和其临时父节点列表中的节点每间隔时间t进行一次心跳,如果时间s内没有收到心跳反馈信息,则认为该临时父节点离线,则移除该临时父节点;如果临时父节点列表为空,则重复步骤2.5。

步骤3群消息传输

步骤3.1消息的重复判断

每条群消息包含有消息id(由发送节点产生,长度为n的随机数),每当节点收到一条群消息的时候都会记录该消息id,并且为该记录项设置一个过期清除时间t;如果节点收到一条消息它的id能在本端自己的消息列表中查询到,则说明该信息为重复接收的消息,删除该消息;否则将该消息转发给除发信节点之外的自己的临时子节点和临时父节点。

消息的转发规则:从某个群成员p收到消息后,判断消息是否重复,不重复则转发给所有的临时子节点和临时父节点(除去p)。

如图1所示,节点d在“xxx讨论群”发出了一条消息msg1,节点a接收到了来自节点d的群消息msg1,节点a会将消息转发给除d之外的所有同在“xxx讨论群”的好友节点b和c,同时节点a会记录msg1的消息id,之后再收到群消息相同消息id的群消息则直接丢弃不做处理(id相同的群消息表示收到重复的消息),节点b收到msg1后以同样的方式将消息转发给节点m和n,至此节点d发送的群消息msg1传送给了“xxx讨论群”中的所有成员。

本发明方法采用树型拓扑结构的通信模式,系统维护比较简单、传输速度快,并且信息传输过程中的目标者非常明确,指向性较强,能够有力的保证数据的传输准确性和精准性。本发明方法摒弃了客户端-服务器模式,采用p2p对等网络,极大地降低了对网络的依赖,避免了服务器成为信息传输的瓶颈现象。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1