专利名称:在即时通讯中管理成员个性签名的方法
技术领域:
本发明涉及属于互联网IMdnstant Messaging)即时通信技术领域,主要是一种在即时通讯中管理成员个性签名的方法。
背景技术:
目前互联网上IM应用非常广泛,方便了大家之间的沟通。所谓的IM的签名就是一种在IM上公开体现个性,发表个人诉求的一种快捷方式。用户可以将今天的所见、所闻、 所感用简短的语句写在自己使用的IM客户端上,这样他的其他好友在打开自己的IM客户端时,就会看到该用户的IM签名,从而了解他的所见、所闻、所感。现有IM变更签名和被他的好友了解到的过程如图1.存在非及时性。现在一般IM系统实现签名变更通知是这样实现的用户A变更签名,IM客户端通知IM服务器,IM服务器取出用户A的好友列表,根据好友列表里每个好友的帐号,去依次查询每个好友的在线状态,若在线,则获取其当前IP地址和端口并向其下发用户A的新签名。也就是对IM好友的一个群发。这里存在的问题是,用户每次更新签名,IM服务器都要去依次查询该用户的每个好友的状态和IP地址以便群发,可能是去查询数据库,也可能是根据帐号的hash值查询IM 系统内部程序模块里的哈希表,这里的查询会有性能损失。查询数据库,无疑会增加后台数据库的压力。而根据帐号的hash值查询,好像比查询数据库性能更高一些,实际也有性能损失,比如计算帐号hash值的过程一般比较复杂,本身就耗费一些运算,只是相对于较复杂的海量数据查询来说,计算hash的过程比较短小而已。这里的群发签名导致每次都查询好友帐号的操作,对IM系统构成了不小的压力。
发明内容
本发明的目的正是克服上述技术的不足,而提供一种在即时通讯中管理成员个性签名的方法,使IM系统能够高效得下发用户的签名变更,并使用户及时知道自己感兴趣的好友个性签名变化情况,节约用户的时间,提高用户使用IM的便利性。本发明解决其技术问题采用的技术方案系统为IM帐号除了分配一个全局唯一的IM帐号外,在每次IM用户登录时,再给 IM用户分配一个动态ID。动态ID,为4字节的iht类型,高2位代表其当前所在的服务器编号,低2字节代表其所在服务器上进程中的索引位置。即将IM服务器集群看作一个数组,根据此ID高2 位字节,经过跨机模块通过socket可以唯一定位到该IM帐号在服务器集群中的某一台服务器,某IM服务器上的进程中管理着一个IM用户的数组,根据动态ID的低2位字节可以直接定位到该IM用户数组中的某个IM用户。IM用户登录时,IM登录模块在IM服务器集群中根据各服务器的负载,为IM用户分配一个合适的存储位置,即动态ID,并在数据库中更新此IM用户的当前动态ID。
一个IM用户的好友总数是有上限的,好友除了有IM帐号外,再为其分配一个好友 ID,代表其在当前IM用户中好友列表中的位置,范围为1 好友总数上限。好友ID,为2字节的short int类型,代表其在当前IM用户中的好友列表中的位置索引,即一个IM用户的好友列表为一个数组,根据一个好友ID可以直接定位到一个好友。IM用户登录时,除了获取到自己的动态ID,也会从IM服务器上下载自己的好友列表,及其每个好友的基本信息,如帐号,也包括每个好友的好友ID。一个IM用户,他的好友联系人均具有相对于此用户的好友ID,那么此IM用户本身也是他的好友的好友,定义该IM用户在他的某好友中的好友ID为此好友的相对ID。即相对ID为该IM用户在他的某好友的好友列表中的位置。至此,一个IM用户除了具有帐号,登录后还具有动态ID;他的好友,除了具有帐号,还具有好友ID和相对ID。IM服务器进程中管理一个登录的IM用户的数据结构如附图2。服务器1列出的是动态ID在服务器上的组织形式,为一个指针数组,其存储内容为指针,指针指向的内容为一个登录的IM用户数据,当指针为空时,说明该动态ID未被分配。由于数组的性质,根据动态ID可以直接定位到动态ID指向的IM用户数据。服务器2列出的是动态ID指向的IM用户数据的具体结构,其分为两部分,其一为登录IM用户的基本信息,如IP,端口,当前个性签名等,其二为IM用户的好友列表指针数组,数组大小为IM系统允许的好友上限数,其存储内容为指针,指针指向内容为好友的信息好友ID、相对ID,动态ID,签名选项和其他一些选项数据。为了使IM客户端能够根据用户设置的签名选项,立即提醒用户的签名变化,在IM 系统下发给IM客户端的签名变更消息中增加一个字段,其内容为用户设置的签名选项。IM用户登录系统及变化签名的过程如下1,IM动态ID分配模块为IM用户分配一个动态ID,并告知IM客户端;2,IM服务器初始化该动态ID指向的内容,记录登录IM用户的IP,端口等;
3,初始化该IM用户的好友列表,登记好友的好友ID,相对ID,动态ID,并告知IM 客户端;4,轮询好友列表,根据好友有效的动态ID定位到好友数据,根据好友的相对ID定位到IM用户在好友的好友列表数组的位置,更新其中的动态ID为登录IM用户的动态ID ;5,IM用户签名变更时,IM客户端以IM用户的本次动态ID的身份向IM系统提交新签名;6,IM系统根据动态ID,直接定位到某服务器的对应数组上,并检查动态ID指向的 IM用户的基本信息中的帐号和消息中IM用户的帐号是否相符以容错;7,若相符,则IM系统更新动态ID指向的本帐号基本信息中的新签名,并开始扫描好友指针数组;8,当扫描未结束时,检查该好友的动态ID是否为空,否则结束;9,若好友的动态ID为空,说明其未登录,扫描下一个好友,执行步骤8 ;10,若好友的动态ID不为空,则检查其签名选项,查看是否接收签名,若不接收, 则扫描下一个好友,执行步骤8 ;
11,若接收签名,则根据其动态ID直接定位到好友动态ID指向的位置,取出其登录的IP,端口等,下发新签名,其中携带该好友对该IM用户设置的签名选项;下发后扫描下一个好友,执行步骤8。通过以上步骤,一个IM用户登录后,当发布一条新签名到所有好友时,不再需要根据好友的IM帐号去查询好友的IP地址、好友是否接受签名等信息,而是根据好友的动态 ID直接定位到好友的数据区,效率大大提高。上述步骤4的目的是,在一个IM用户新登录后,通知他的所有在登录状态的好友的数据区,根据好友的相对ID,知道此IM用户在好友的好友列表中的位置,直接据此更新其指向的动态ID。下发的签名信息携带了好友针对用户的签名选项,好友的IM客户端收到IM签名时,根据其中的选项决定是否立即提醒用户。IM用户设置关注某好友的签名过程如下1,IM用户在IM客户端上选择需要关注签名的好友;2,IM客户端向IM服务系统提交消息,包含本IM用户的动态ID,关注好友的好友 ID和相对ID ;3,IM服务系统根据IM用户的动态ID,直接定位到其数据区;4,根据好友ID,再直接定位到此关注好友的数据指针指向的数据区;5,判断关注好友的动态ID是否有效;6,若有效,说明该好友处于登录状态,则直接定位到好友动态ID指向的数据区;7,根据好友的相对ID,更新此数据区好友数组中的签名选项;执行步骤9 ;8,若无效,说明该好友未登录;执行步骤9 ;9,将该设置写入数据库,保存用户的设置,结束。以上过程,根据IM用户的动态ID和其选择的关注好友的好友ID,相对ID,分别直接定位到了各自的数据区。设置成功后,被关注好友的签名若发生变化,则其群发签名时会扫描到IM用户对其设置的签名选项数据。本发明有益的效果是1) IM系统在用户登录后,消息交互里携带动态ID,好友ID,相对ID,可以直接定位 IM用户的数据,其复杂度为0 (1),避免了频繁的数据库查询或者复杂的hash计算,效率大大提高。2)签名变更携带的消息里携带用户的签名选项,IM客户端可以根据选项内容在第一时间提醒用户好友签名发生了变化,省去了用户主动打开IM客户端主动去浏览的动作,节省了用户的大量宝贵时间。3)对于选择了“屏蔽”个性签名的好友,IM服务器不需要再向IM客户端下发签名变化消息,减轻了 IM服务器端的处理压力,也节省了带宽。
图1是现有技术中IM系统签名变化和好友发现签名变化的示意图;图2是IM服务器端的数据组织结构图3是3个IM用户A,B,C的数据结构组织图4是IM用户A的的数据图;图5是IM用户B的的数据图;图6是IM用户C的的数据图;图7是IM用户C登录步骤图;图8是IM用户A修改签名步骤图;图9是IM用户C设置关注好友A签名的步骤图。
具体实施例方式下面结合附图和实施例对本发明作进一步说明本发明所述的一种在即时通讯中管理成员个性签名的方法,分为IM用户登录过程、签名变更过程、签名关注设置过程。假设3个在线IM用户,帐号分别为A,B,C。其在IM系统中分布如图3,其中A有好友C,B;如图4B有好友C,A;如图5C有好友B,A;如图6IM用户登录系统过程IM用户登录IM服务器,IM服务器为该IM用户分配动态ID, 并在服务端初始化登记该用户的IP,端口等信息,并初始化该用户的好友列表,更新在线好友中的该用户的动态ID信息。用户C登录具体步骤如下如图7步骤1,IM动态ID分配模块为IM用户C分配一个动态ID c,并告知IM客户端;ID分配模块为IM服务器端为所有IM用户唯一分配动态ID的模块,其唯一性确保为每个在线的IM用户分配一个唯一的无冲突的动态ID。IM用户每次登录,其被分配的动态ID可能均不相同。动态ID代表了 IM用户本次登录的数据区的绝对地址。IM服务器端使用动态ID可以在0(1)复杂度内迅速定位到在线IM用户的数据区。本例中在服务器 1中为C用户分配了动态ID C。见图3。步骤2,IM服务器初始化该动态ID c指向的内容,记录登录IM用户C的IP,端口等;IM服务器为登录IM用户C分配动态ID c后,为动态ID分配数据空间,记录IM用户C的IP地址,通信端口,并记录该用户当前的最新签名信息。步骤3,初始化该IM用户C的好友列表,登记好友的好友ID,相对ID,动态ID,并告知IM客户端;IM服务端根据服务器保存在数据库中的好友列表,初始化该登录IM用户的动态 ID指向的数据区中的好友列表,并将好友ID,相对ID通知IM客户端保存。本例中用户C从数据库中取出C的好友列表具有好友B,A,并得到B,A的当前动态ID分别为d,a,可知其好友为在线状态;也取得了好友的好友ID,分别为1,2,代表第1, 第2个好友;取得了好友的相对ID,分别为1,1,表明用户C在这2个好友的好友列表中的位置。至此,IM客户端具备的数据如下IM用户本身的IM帐号,动态ID号;IM用户的各个好友的IM帐号,好友ID号,相对ID号。
步骤4,轮询用户C的好友列表,根据好友有效的动态ID定位到好友数据,根据好友的相对ID定位到IM用户在好友的好友列表数组的位置,更新其中的动态ID为登录IM 用户C的动态ID c ;IM服务端根据该IM用户的各个好友的动态ID和该IM用户针对每个好友的相对 ID,更新其每个好友的数据区的好友列表中,该IM客户的动态ID。这样,该IM用户的所有在线好友的数据区中也都有了该IM用户的动态ID。当其好友的签名发生变化时,可以寻此动态ID,立即通知到该IM用户。本例中,用户C比用户A,B晚登录,用户C的好友列表中能得到其好友的动态ID 地址,但其好友此时不知道用户C的动态ID地址。故IM服务端需要扫描用户C的好友列表,根据好友的动态ID,主动更新好友数据区中的用户C的动态ID地址。至此,3个IM用户中的动态ID地址都具备了。签名变更过程登录IM用户A主动修改其签名。如图8步骤1,IM用户A签名变更时,IM客户端以IM用户的本次动态ID a的身份向IM 系统提交新签名;IM客户端A向IM服务端发送数据包,通知IM用户A的签名发生了变化,数据包中携带IM用户的动态ID a和IM用户的帐号A。步骤2,IM系统根据动态ID a,直接定位到服务器1的对应数组上,并检查动态ID a指向的IM用户的基本信息中的帐号和消息中IM用户的帐号是否相符以容错;IM服务端收到该IM用户A的签名变化消息,根据其中的动态ID a,直接定位到该用户的数据区。此时,需要进行一些容错方面的判断,此时可以利用数据包中携带的帐号和数据区中的帐号进行对别。步骤3,若相符,则IM系统更新动态ID a指向的本帐号基本信息中的新签名,并开始扫描好友指针数组;由于每个IM用户的好友数是有限的,所以这个扫描也是有限的。本例中只有2个好友C,B。步骤4,当扫描好友结束时,结束签名推送过程,否则进入下一个步骤;步骤5,若好友的动态ID为空,说明其未登录,执行步骤4 ;这里直接根据好友的动态ID是否为空来判断其是否处于登录在线状态,避免了查询后台数据库或者其它哈希数据来检测好友是否处于登录状态,节省了资源。这也是“IM 用户登录”过程中“步骤4”更新好友的数据区中的自己的动态ID的原因。当IM用户C未登录时,好友C的动态ID为空,则跳过好友C,继续扫描下一个好友。步骤6,若好友的动态ID不为空,则检查其签名选项,查看是否接收签名,若不接收,则扫描下一个好友,执行步骤4 ;这里要检查自己好友是否接收签名,若不接收,则无必要向其下发消息。节省了资源。本例中,当IM用户C登录时,IM用户A的数据区中的好友C的动态ID变为有效, 则需要处理好友C,并检查其是否接受签名。步骤7,若接收签名,则根据其动态ID直接定位到好友动态ID指向的位置,取出其登录的IP,端口等,下发新签名,其中携带该好友对该IM用户设置的签名选项;下发后扫描下一个好友,执行步骤4。下发的签名消息中含有该好友对该IM用户设置的签名选项,当好友IM客户端收到此消息时,可以根据这个选项来决定是否立即弹出消息显示这个个新签名。本例中,用户A的好友B,C的签名选项均为默认的0-接受但是不关注。则IM服务端会向用户B和C下发签名更新消息。签名关注设置过程IM用户在客户端上设置关注某好友的签名变化,当该好友的签名变化时,可以在第一时间得到通知。IM用户C设置关注好友A的签名步骤如下如图9步骤1,IM用户C在IM客户端上选择需要关注签名的好友A ;此时IM用户A处于登录状态,客户端此时知道所有好友的好友ID,相对ID信息。 用户C中,A的好友ID为2,相对ID为1。步骤2,IM客户端向IM服务系统提交消息,包含本IM用户的动态ID c,关注好友 A的好友ID 2和相对ID 1 ;消息包中包含该IM客户对好友的选项数据,0-表示默认设置,不关注此好友,但是接收签名;1-表示不关注,不接收;2-表示关注此好友。本例中,关注A的签名,则签名选项数据设置为2。步骤3,IM服务系统根据IM用户的动态ID c,直接定位到服务器1上的数据区;IM服务器收到消息包后,根据消息中的用户IM的动态ID c,直接定位到服务器1 上的数据区。步骤4,根据好友ID 2,再直接定位到此关注好友A的数据指针指向的数据区;由于步骤3已经定位到该IM用户C的数据区,IM服务器再根据消息包中携带的好友ID 2,可以直接定位到好友A在该IM用户C中的位置。上述操作均为0(1)复杂度。步骤5,判断关注好友A的动态ID是否有效;需要根据好友A的动态ID的有效性来判断其是否处于在线登录状态。步骤6,若A的动态ID有效,说明该好友处于登录状态,则直接定位到好友动态ID a指向的数据区;当该好友A的动态ID有效时,本例为a,可以直接根据此值再定位到服务器1上对应的数据区,其复杂度也为0(1)。步骤7,根据好友的相对ID 1,更新此数据区好友数组中的签名选项;执行步骤 9 ;相对ID,是该IM用户在其关注的好友的好友列表中的绝对位置,根据此相对ID, 可以迅速定位到该IM用户在好友中的位置,并更新其设置的选项,其复杂度也为0(1)。本例中,用户C的好友A的相对ID为1,表明用户C在用户A的好友列表中的位置为1。设置好关注选项为2-关注后,当用户A的签名发生变化时,会执行“签名变更过程”,并在该过程的步骤6中检查到该选项,以决定是否下发新签名。关注选项为2,表明C 用户关注A用户的签名,下发时需要携带该选项。当关注选项为1时,表明C用户不需要A 用户的签名,此时不向用户C下发用户A的新签名。
步骤8,若A的动态ID无效,说明好友A未登录;执行步骤9 ;当用户A未登录时,其动态ID为空。步骤9,将该设置写入数据库,保存用户的设置,结束。最后一步需要在数据库中永久保存此设置,以便IM用户初始登录时可以初始化好友数据。综上,为IM系统除了帐号外,引入每次动态分配的动态ID,和好友ID,相对ID,使签名的关注、变更过程由查询数据库的耗时行为方式变为了 0(1)复杂度的绝对寻址方式, 大大提高了系统的效率。最后应说明,以上实例仅用以说明本发明的技术方案并且不限与此,而是在应用上可以延伸到其它的修改,变化,应用,并且认为所有这样的修改,变化,应用,实施实例都在本发明的精神和范围内。
权利要求
1.一种在即时通讯中管理成员个性签名的方法,其特征是IM用户登录系统及变化签名的步骤如下(1)在每次IM用户登录时,IM动态ID分配模块为IM用户分配一个动态ID,并告知IM客户端;(2)IM服务器初始化该动态ID指向的内容,记录登录IM用户的IP、端口信息;(3)初始化该IM用户的好友列表,登记好友的好友ID、相对ID、动态ID,并告知IM客户端;(4)轮询好友列表,根据好友有效的动态ID定位到好友数据,根据好友的相对ID定位到IM用户在好友的好友列表数组的位置,更新其中的动态ID为登录IM用户的动态ID ;(5)IM用户签名变更时,IM客户端以IM用户的本次动态ID的身份向IM系统提交新签名;(6)IM系统根据动态ID,直接定位到某服务器的对应数组上,并检查动态ID指向的IM 用户的基本信息中的帐号和消息中IM用户的帐号是否相符;(7)若相符,则IM系统更新动态ID指向的本帐号基本信息中的新签名,并开始扫描好友指针数组;(8)当扫描未结束时,检查该好友的动态ID是否为空,否则结束;(9)若好友的动态ID为空,说明其未登录,扫描下一个好友,执行步骤(8);(10)若好友的动态ID不为空,则检查其签名选项,查看是否接收签名,若不接收,则扫描下一个好友,执行步骤(8);(11)若接收签名,则根据其动态ID直接定位到好友动态ID指向的位置,取出其登录的 IP、端口信息,下发新签名,其中携带该好友对该IM用户设置的签名选项;下发后扫描下一个好友,执行步骤(8)。
2.根据权利要求1所述的在即时通讯中管理成员个性签名的方法,其特征是在IM系统下发给IM客户端的签名变更消息中增加一个字段,其内容为用户设置的签名选项,下发的签名信息携带了好友针对用户的签名选项,好友的IM客户端收到IM签名时,根据其中的选项决定是否立即提醒用户;IM用户设置关注某好友的签名步骤如下(1)IM用户在IM客户端上选择需要关注签名的好友;(2)IM客户端向IM服务系统提交消息,包含本IM用户的动态ID,关注好友的好友ID 和相对ID ;(3)IM服务系统根据IM用户的动态ID,直接定位到其数据区;(4)根据好友ID,再直接定位到此关注好友的数据指针指向的数据区;(5)判断关注好友的动态ID是否有效;(6)若有效,说明该好友处于登录状态,则直接定位到好友动态ID指向的数据区;(7)根据好友的相对ID,更新此数据区好友数组中的签名选项;执行步骤(9);(8)若无效,说明该好友未登录;执行步骤(9);(9)将该设置写入数据库,保存用户的设置,结束。
3.根据权利要求1或2所述的在即时通讯中管理成员个性签名的方法,其特征是所述的动态ID,为4字节的int类型,高2位代表其当前所在的服务器编号,低2字节代表其所在服务器上进程中的索引位置。
4.根据权利要求1或2所述的在即时通讯中管理成员个性签名的方法,其特征是所述的好友ID,为2字节的short int类型,代表其在当前IM用户中的好友列表中的位置索引。
5.根据权利要求1或2所述的在即时通讯中管理成员个性签名的方法,其特征是所述的相对ID为该IM用户在他的某好友的好友列表中的位置。
全文摘要
本发明涉及一种在即时通讯中管理成员个性签名的方法,系统为IM帐号除了分配一个全局唯一的IM帐号外,在每次IM用户登录时,再给IM用户分配一个动态ID。IM系统在用户登录后,消息交互里携带动态ID,好友ID,相对ID,可以直接定位IM用户的数据,签名变更携带的消息里携带用户的签名选项,IM客户端可以根据选项内容在第一时间提醒用户好友签名发生了变化,省去了用户主动打开IM客户端主动去浏览的动作,节省了用户的大量宝贵时间。本发明有益的效果使IM系统能够高效得下发用户的签名变更,并使用户及时知道自己感兴趣的好友个性签名变化情况,节约用户的时间,提高用户使用IM的便利性。
文档编号H04L29/06GK102325095SQ201110191729
公开日2012年1月18日 申请日期2011年7月7日 优先权日2011年7月7日
发明者卢先敏, 吕凡 申请人:杭州仁盈科技有限公司