CN113760569B - 一种多账号管理方法和系统 - Google Patents

一种多账号管理方法和系统 Download PDF

Info

Publication number
CN113760569B
CN113760569B CN202110014262.3A CN202110014262A CN113760569B CN 113760569 B CN113760569 B CN 113760569B CN 202110014262 A CN202110014262 A CN 202110014262A CN 113760569 B CN113760569 B CN 113760569B
Authority
CN
China
Prior art keywords
account
sub
memory
processes
shared memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110014262.3A
Other languages
English (en)
Other versions
CN113760569A (zh
Inventor
贾林江
周伟
罗文祥
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202110014262.3A priority Critical patent/CN113760569B/zh
Publication of CN113760569A publication Critical patent/CN113760569A/zh
Application granted granted Critical
Publication of CN113760569B publication Critical patent/CN113760569B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging middleware

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种多账号管理方法和系统,涉及计算机技术领域。该方法的一具体实施方式包括:创建共享内存,并且将共享内存划分为数据结构相同的多个子内存,为每个账号的进程分配一个子内存,以及当任一账号发生状态变化时,通过分配有账号的进程的子内存之间的通信,将状态变化通知给其它账号的进程。该实施方式降低了多账号管理的实现的复杂度和实现成本,并且提高了多账号管理系统的可维护性。

Description

一种多账号管理方法和系统
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于共享内存的多账号管理方法。
背景技术
当前,用户通常可在例如单台机器的windows系统上启动多个客户端进程,以分别登陆不同的账号,系统以账号管理器为中心节点,基于管道搭建的消息通信网络集中管理多个账号进程。
然而在现有技术的多账号管理方案中,当多个账号进程间进行如在线状态、未读消息等数据的数据交换时需要经过账号管理器中转,这意味着必须维持账号进程与账号管理器之间的通信管道,实现成本较高,不易维护。另外,一旦账号管理器进程异常,整个通信网络即陷入瘫痪,无法修复,只能重新启动各个账号进程,再次搭建通信管道。
发明内容
有鉴于此,本发明实施例提供一种基于共享内存的多账号管理方法,能够解决多账号进程共享数据的实现过于复杂、不易维护的问题。基于共享内存,采用去中心化设计,实现一整套账号管理的方案。
为实现上述目的,根据本发明实施例的一个方面,提供了一种多账号管理方法,包括:
创建共享内存,并且将所述共享内存划分为数据结构相同的多个子内存,
为每个所述账号的账号进程分配一个所述子内存,以及
当任一所述账号发生状态变化时,通过分配有所述账号的进程的所述子内存之间的通信,将所述状态变化通知给其它所述账号的进程。
根据本发明实施例的一个方面的多账号管理方法,其中,
当为任一所述账号的进程分配所述子内存时,注册并触发启动消息信号,以通过所述启动消息信号将为该账号的进程分配了所述子内存的事件通知给所述共享内存中存在的其它所述账号的进程。
根据本发明实施例的一个方面的多账号管理方法,其中,
当为任一所述账号的进程分配所述子内存时,注册状态变化消息信号,使得当任一所述账号发生状态变化时均触发与发生所述状态变化的所述账号对应的所述状态变化消息信号,以通过所述状态变化消息信号将所述状态变化通知给所述共享内存中存在的其它所述账号的进程。
根据本发明实施例的一个方面的多账号管理方法,其中,
获取所有被分配所述子内存的所述账号的进程的句柄,使得当任一所述账号的进程崩溃时,触发与崩溃的所述账号的进程对应的所述句柄,以通知所述共享内存中存在的其它所述账号的进程,并且由收到该通知的其它任一所述账号的进程清理崩溃的所述账号的进程的所述子内存。
根据本发明实施例的一个方面的多账号管理方法,其中,
将所述共享内存中的第一个所述子内存标记为所述共享内存的公共内存块,用于存放所述共享内存的公共数据,并且
将剩余的所述子内存标记为私有内存块,用于分配给各个所述账号的进程并存放私有数据。
根据本发明实施例的一个方面的多账号管理方法,其中,
每个所述子内存的数据结构成员中均包括进程编号,并且
通过将所述账号的进程id写入所述子内存中以作为所述进程编号而将一个所述子内存分配给一个所述账号的进程。
根据本发明实施例的一个方面的多账号管理方法,其中,
当启动一个新的账号的进程时,将该新的账号的所述进程id写入所述共享内存的序列中的第一个未被分配所述账号的进程的所述子内存中作为所述进程编号,并且
当任一个所述账号退出时自行清理所占的所述子内存。
根据本发明实施例的另一方面,提供了一种多账号管理系统,包括:
共享内存创建模块,用以创建共享内存,并且将所述共享内存划分为数据结构相同的多个子内存,
子内存分配模块,用于为每个所述账号的账号进程分配一个所述子内存,以及
通信模块,当任一所述账号发生状态变化时,通过分配有所述账号的进程的所述子内存之间的通信,将所述状态变化通知给其它所述账号的进程。
根据本发明实施例的又一方面,提供了一种多账号管理的电子设备,包括:
一个或多个处理器;以及
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现根据本发明实施例的一方面所述的方法。
根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现根据本发明实施例的一方面所述的方法。
上述发明中的一个实施例具有如下优点或有益效果:因为通过共享内存的操作对多个账号进行统一管理以实现多账号进程的数据交换,所以克服了多进程共享数据的实现复杂、不易维护技术问题,进而达到以去中心化的简单结构和低成本实现复杂的多账号管理,同时降低维护成本的技术效果。
更具体地,通过根据本发明实施例的基于共享内存的多账号管理方法和系统,能够使得多个账号进程间方便地进行数据(在线状态、未读消息数等)交换而不需要经过账号管理器中转,从而无需维持账号进程与账号管理器之间的通信管道,降低了实现成本并且提高了可维护性。另外,即使发生账号进程异常,例如账号进程崩溃,整个系统也不会陷入瘫痪,仅通过其他进程清理崩溃进程的内存块即可,无需重新启动各账号进程以及搭建通信管道。使用本发明实施例的方法,调用者无需关心数据同步及各个进程状态,仅关注数据变化的通知,读取数据内容做相应的处理即可。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的多账号管理方法的主要流程的示意图;
图2是根据本发明实施例的多账号管理方法的工作原理的示意图;
图3是示出共享内存的数据段和数据结构的框图;
图4是根据本发明实施例的多账号管理系统的主要模块的示意图;
图5是本发明实施例可以应用于其中的示例性系统架构图;
图6是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施例的多账号管理方法的主要流程的示意图,如图1所示,根据本发明实施例的多账号管理方法主要包括:步骤S101,创建共享内存,并且将所述共享内存划分为数据结构相同的多个子内存;步骤S102,为每个所述账号的账号进程分配一个所述子内存;以及步骤S103,当任一所述账号发生状态变化时,通过分配有所述账号的进程的所述子内存之间的通信,将所述状态变化通知给其它所述账号的进程。
图2是根据本发明实施例的多账号管理方法的工作原理的示意图。首先如图2所示,本发明实施例的主要构思是将操作及数据结构封装为统一的SDK(公知的软件开发工具包),在SDK内部管理一组共享内存的状态和数据,向共享内存写入数据或从共享内存读取数据,同时使共享内存中的每个进程监听同组的其他进程,当收到如数据更新、新进程加入和已有进程退出等状态变化的信号时,及时更新共享内存,以对多个账号进行统一管理。使用时,用户将集成的SDK集成到系统进程中,并通过接口进行交互。
下面结合图3和4详细描述根据本发明实施例的多账号管理方法。
步骤S101:创建共享内存
当启动新的账号进程时,SDK判断是否存在以进程的参数key所指定的组名称命名的共享内存,当不存在相应的共享内存时,SDK调用共享内存QSharedMemory的Create函数创建一组共享内存。在本发明实施例中,将一块共享内存划分为大小相同、数据结构相同的多块子内存。例如创建大小为256KB的共享内存,划分为64块,每块大小为4KB,每块子内存的数据结构均定义为:
如代码注释所述,每块子内存的数据结构均定义有:dwProcessId,即进程编号,用于写入其自身所属的进程的id;dwDataSize,记录实际数据的大小;以及data,用于存放数据。
将第一块子内存标记为公共内存块,作为存放如全局配置这样的公共数据的公共数据段。例如,通过将第一块子内存的dwProcessId置为能够与账号的进程id区分开的数字而将第一块子内存标记为公共内存块,例如将其dwProcessId置为非0,例如-1,如图3所示。将除了第一块以外的其余所有子内存标记为私有内存块以作为私有数据段,用于存放各个账号的进程。其中,将私有数据段的dwProcessId初始化为不同于公共数据段的dwProcessId的统一的数字,例如0,表示该数据段未使用,而当挂载账号进程时,私有数据段的dwProcessId被置为相应账号进程的进程id。
步骤S102:分配子内存
当存在以启动的新账号进程的参数key所指定的名称命名的共享内存或创建了这样的共享内存时,将该新的进程放入该共享内存。具体地,首先调用windows的CreateWindowW函数创建与共享内存的组名同名的消息窗口,用于接收系统的广播消息,并根据需要注册一个以上的消息信号,用于后文将描述的跨进程通信。此外,调用windows的Cr eateEvent函数创建本地事件hEvent句柄,同时启动一个子线程,调用W aitForMultipleObjects阻塞线程,等待外部通知。其中,创建hEvent句柄是为了使进程能够自己控制子线程的阻塞与解除,调用WaitForMultipl eObjects以阻塞线程并等待句柄,当多个进程中的任一进程的句柄变为触发态后,该函数解除对进程的阻塞,并返回触发的句柄。进程触发自身的hEvent句柄,从而解除对自身的阻塞。
在本发明实施例中,注册的消息信号包括用于通知新的账号进程加入共享内存的JMSharedMemoryAttached消息信号,和用于通知账号的状态发生变化的JMSharedMemoryChange消息信号,两个消息信号的具体工作方式如下文所述。当然,也可以根据需要注册更多或更少的消息信号。
然后,从第1块子内存开始依次查找所有内存块,例如找到第一个参数dwProcessId为0的子内存,将新进程的进程id写入该dwProcessI d为0的子内存中,从而将新进程与子内存关联。如果dwProcessId不为0,则调用OpenProcess函数打开进程句柄hHandle(根据已经关联的进程数,此操作可能重复多次,得到hHandle数组),于是解除阻塞并唤醒前述被阻塞的子线程,然后等待本地事件hEvent和hHandle数组的触发。
步骤S103:跨进程通信
当有新的进程加入共享内存时,在写入进程id的过程中,触发JMS haredMemoryAttached消息,其他进程会收到消息,并取得消息参数中的进程id,从而将新进程的加入通知给其它进程。
当发生数据更新而向共享内存写入数据或从共享内存读取数据时,触发JMSharedMemoryChange消息,其他进程收到通知后可以读取数据,例如取得参数中的进程id,调用OpenProcess获取句柄hHandle,用以进行监听。其中,读取或写入都要借助例如ClientInfoEntity类进行序列化与反序列化,当然也可以替换为其它业务数据类。
当有进程退出时会自行清理占有的子内存块。另外,如果有进程意外崩溃,则该崩溃的进程自身无法清理内存块数据,然而在分配子内存即挂载进程的步骤中已经使其他进程通过WaitForMultipleObjects函数被阻塞并使其他进程等待任一进程的句柄hHandle的触发,所以当有进程意外崩溃时,其触发hHandle句柄,即hHandle句柄会变为触发态,从而WaitForMultipleObjects函数解除对其他进程的阻塞,因此其他进程仍然可以获知进程崩溃的事件,从而由任意一个,优选为由第一个感知到的进程负责清理崩溃的进程所占的子内存块。由此,通过WaitFor MultipleObjects函数监听其它进程的异常退出。
以上描述了根据本发明实施例的基于共享内存的多账号管理方法,在本发明实施例中,通过导出封装在SDK中的类JMShareMemory作为操作类来实现上述的一系列操作,进而管理多个账号的进程。下面介绍操作类JMShareMemory主要包括的函数:
CreateAndAttach函数,用于创建共享内存以及将新启动的账号内存挂载于一个共享内存,当启动一个账号进程时,调用该函数并获取新进程的参数key,通过该参数指定一个组名称,SDK内部判断是否存在以该组名称命名的一组共享内存,如不存在,则该函数调用共享内存QSharedMemory的Create函数如上所述地创建一组以组名称命名的共享内存,如存在,则该函数调用共享内存QShareMemory的attach函数将新启动的账号进程如上所述地挂载于已有的共享内存;
Detach函数,用于释放共享内存;
ReadPublicData函数,用于读取公共数据段data的数据;
WritePublicData函数,用于写入公共数据段data的数据;
ReadAllPrivateData函数,用于读取所有私有数据段data的数据,包括其他进程写入的数据;
WritePrivateData函数,用于向私有数据段data写入数据,而无法修改其他进程的数据;
CleanPrivateData函数,用于清空自己的私有数据段。
此外,JMShareMemory类还包括信号SigPublicDataChanged和SigPrivateDataChanged,其分别是公共数据和私有数据有变化时产生的信号,用户通过这两个信号做相应的数据重新读取及展示逻辑。
下面描述根据本发明实施例的基于共享内存的多账号管理系统。
图4是根据本发明实施例的多账号管理系统200的主要模块的示意图如图所示,根据本发明实施例的多账号管理系统200主要包括以下模块。
共享内存创建模块201:
该模块用以创建共享内存,并且将所述共享内存划分为数据结构相同的多个子内存。如前文所述,将一块共享内存划分为大小相同、数据结构相同的多块子内存,例如创建大小为256KB的共享内存,划分为64块,每块大小为4KB,每块子内存的数据结构均定义为包括:参数dwProcessId,用于写入其自身所属的进程的id;参数dwDataSize,记录实际数据的大小;以及参数data,用于存放数据。
子内存分配模块202:
该模块用于为每个所述账号的账号进程分配一个所述子内存,并且构建好各账号进程间的通信渠道。具体地,如前文所述,对于分配给账号进程的子内存,首先创建与共享内存的组名同名的消息窗口,用于接收系统的广播消息,并注册消息信号,用于跨进程通信。此后,将新进程的进程id写入第一个dwProcessId为0的子内存的dwProcessId中,从而将新进程与子内存关联。此外,启动子线程并创建本地事件h Event句柄和hHandle句柄,同时,调用WaitForMultipleObjects以实现进程间的监听。
通信模块203:
当任一所述账号发生状态变化时,通过分配有所述账号的进程的所述子内存之间的通信,将所述状态变化通知给其它所述账号的进程。例如,当一个新的进程被挂载于共享内存时,触发JMSharedMemoryAt tached消息,其他进程收到消息后,取得消息的参数中的进程id,获取句柄hHandle,用于等待该句柄出发从而对新进程进行监听。此外,通过JMSharedMemory操作类的函数WritePublicData或WritePrivateData写入数据时,触发JMSharedMemoryChange消息,其他进程收到通知后可以调用ReadPublicData或ReadAllPrivateData读取数据。而且,如果进程崩溃并无法清理自身的内存块数据,由于其他进程已经通过WaitForMu ltipleObjects等待了进程句柄从而进行监听,所以可以获知进程崩溃事件,由任意一个,优选为由第一个感知到的进程负责清理。
以上描述了根据本发明实施例的基于共享内存的多账号管理方法和系统。通过根据本发明实施例的基于共享内存的多账号管理方法和系统,能够使得多个账号进程间方便地进行数据(在线状态、未读消息数等)交换而不需要经过账号管理器中转,从而无需维持账号进程与账号管理器之间的通信管道,降低了实现成本并且提高了可维护性。另外,即使发生账号进程异常,例如账号进程崩溃,整个系统也不会陷入瘫痪,仅通过其他进程清理崩溃进程的内存块即可,无需重新启动各账号进程以及搭建通信管道。
即,在本发明实施例中,因为通过共享内存的操作对多个账号进行统一管理以实现多账号进程的数据交换,所以克服了多进程共享数据的实现复杂、不易维护技术问题,进而达到以去中心化的简单结构和低成本实现复杂的多账号管理,同时降低维护成本的技术效果。
图5示出了可以应用本发明实施例的多账号管理方法或多账号管理系统的示例性系统架构500。
如图5所示,系统架构500可以包括终端设备501、502、503,网络504和服务器505。网络504用以在终端设备501、502、503和服务器505之间提供通信链路的介质。网络504可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备501、502、503通过网络504与服务器505交互,以接收或发送消息等。终端设备501、502、503上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备501、502、503可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器505可以是提供各种服务的服务器,例如对用户利用终端设备501、502、503所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本发明实施例所提供的多账号管理方法一般由服务器505执行,相应地,多账号管理系统一般设置于服务器505中。
应该理解,图5中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图6,其示出了适于用来实现本发明实施例的终端设备的计算机系统600的结构示意图。图6示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图6所示,计算机系统600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有系统600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
以下部件连接至I/O接口605:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括发送模块、获取模块、确定模块和第一处理模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,发送模块还可以被描述为“向所连接的服务端发送图片获取请求的模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:创建共享内存,并且将所述共享内存划分为数据结构相同的多个子内存,为每个所述账号的账号进程分配一个所述子内存,以及当任一所述账号发生状态变化时,通过分配有所述账号的进程的所述子内存之间的通信,将所述状态变化通知给其它所述账号的进程。
根据本发明实施例的技术方案,能够使得多个账号进程间方便地进行数据(在线状态、未读消息数等)交换而不需要经过账号管理器中转,从而无需维持账号进程与账号管理器之间的通信管道,降低了实现成本并且提高了可维护性。另外,即使发生账号进程异常,例如账号进程崩溃,整个系统也不会陷入瘫痪,仅通过其他进程清理崩溃进程的内存块即可,无需重新启动各账号进程以及搭建通信管道。
即,在本发明实施例中,因为通过共享内存的操作对多个账号进行统一管理以实现多账号进程的数据交换,所以克服了多进程共享数据的实现复杂、不易维护技术问题,进而达到以去中心化的简单结构和低成本实现复杂的多账号管理,同时降低维护成本的技术效果。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (10)

1.一种多账号管理方法,其特征在于,包括:
创建共享内存,并且将所述共享内存划分为数据结构相同的多个子内存,
为每个所述账号的进程分配一个所述子内存,以及
当任一所述账号发生状态变化时,通过分配有所述账号的进程的所述子内存之间的通信,将所述状态变化通知给其它所述账号的进程;
其中,所述为每个所述账号的进程分配一个所述子内存,包括:首先调用windows的CreateWindowW函数创建与共享内存的组名同名的消息窗口,用于接收系统的广播消息,并根据需要注册一个以上的消息信号;调用windows的CreateEvent函数创建本地事件hEvent句柄,同时启动一个子线程;调用WaitForMultipleObjects以阻塞线程并等待句柄,当多个进程中的任一进程的句柄变为触发态后,利用该函数解除对进程的阻塞,并返回触发的句柄;进程触发自身的hEvent句柄,从而解除对自身的阻塞。
2.根据权利要求1所述的多账号管理方法,其特征在于,其中,
当为任一所述账号的进程分配所述子内存时,注册并触发启动消息信号,以通过所述启动消息信号将为该账号的进程分配了所述子内存的事件通知给所述共享内存中存在的其它所述账号的进程。
3.根据权利要求1或2所述的多账号管理方法,其特征在于,其中,
当为任一所述账号的进程分配所述子内存时,注册状态变化消息信号,使得当任一所述账号发生状态变化时均触发与发生所述状态变化的所述账号对应的所述状态变化消息信号,以通过所述状态变化消息信号将所述状态变化通知给所述共享内存中存在的其它所述账号的进程。
4.根据权利要求1或2所述的多账号管理方法,其特征在于,其中,
获取所有被分配所述子内存的所述账号的进程的句柄,使得当任一所述账号的进程崩溃时,触发与崩溃的所述账号的进程对应的所述句柄,以通知所述共享内存中存在的其它所述账号的进程,并且由收到该通知的其它任一所述账号的进程清理崩溃的所述账号的进程的所述子内存。
5.根据权利要求1或2所述的多账号管理方法,其特征在于,其中,
将所述共享内存中的第一个所述子内存标记为所述共享内存的公共内存块,用于存放所述共享内存的公共数据,并且
将剩余的所述子内存标记为私有内存块,用于分配给各个所述账号的进程并存放私有数据。
6.根据权利要求5所述的多账号管理方法,其特征在于,其中,
每个所述子内存的数据结构成员中均包括进程编号,并且
通过将所述账号的进程id写入所述子内存中以作为所述进程编号而将一个所述子内存分配给一个所述账号的进程。
7.根据权利要求6所述的多账号管理方法,其特征在于,其中,
当启动一个新的账号的进程时,将该新的账号的所述进程id写入所述共享内存的序列中的第一个未被分配所述账号的进程的所述子内存中作为所述进程编号,并且
当任一个所述账号退出时自行清理所占的所述子内存。
8.一种多账号管理系统,其特征在于,包括:
共享内存创建模块,用以创建共享内存,并且将所述共享内存划分为数据结构相同的多个子内存,
子内存分配模块,用于为每个所述账号的账号进程分配一个所述子内存,包括:首先调用windows的CreateWindowW函数创建与共享内存的组名同名的消息窗口,用于接收系统的广播消息,并根据需要注册一个以上的消息信号;调用windows的CreateEvent函数创建本地事件hEvent句柄,同时启动一个子线程;调用WaitForMultipleObjects以阻塞线程并等待句柄,当多个进程中的任一进程的句柄变为触发态后,利用该函数解除对进程的阻塞,并返回触发的句柄;进程触发自身的hEvent句柄,从而解除对自身的阻塞;以及
通信模块,当任一所述账号发生状态变化时,通过分配有所述账号的进程的所述子内存之间的通信,将所述状态变化通知给其它所述账号的进程。
9.一种用于多账号管理的电子设备,其特征在于,包括:
一个或多个处理器;以及
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
10.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-7中任一所述的方法。
CN202110014262.3A 2021-01-06 2021-01-06 一种多账号管理方法和系统 Active CN113760569B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110014262.3A CN113760569B (zh) 2021-01-06 2021-01-06 一种多账号管理方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110014262.3A CN113760569B (zh) 2021-01-06 2021-01-06 一种多账号管理方法和系统

Publications (2)

Publication Number Publication Date
CN113760569A CN113760569A (zh) 2021-12-07
CN113760569B true CN113760569B (zh) 2024-04-05

Family

ID=78786265

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110014262.3A Active CN113760569B (zh) 2021-01-06 2021-01-06 一种多账号管理方法和系统

Country Status (1)

Country Link
CN (1) CN113760569B (zh)

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102236510A (zh) * 2010-04-30 2011-11-09 腾讯科技(深圳)有限公司 一种利用超级任务栏控制即时通信软件的方法及设备
CN102769582A (zh) * 2012-08-02 2012-11-07 深圳中兴网信科技有限公司 逻辑服务器、即时通信系统和即时通信方法
WO2015055073A1 (zh) * 2013-10-18 2015-04-23 北京奇虎科技有限公司 一种消息提醒的方法和装置、以及系统
CN104717207A (zh) * 2015-02-09 2015-06-17 惠州Tcl移动通信有限公司 一种信息共享的方法及服务器
CN105204936A (zh) * 2015-09-30 2015-12-30 山东乾云启创信息科技有限公司 常驻进程管理通用平台及方法
CN106446678A (zh) * 2016-09-22 2017-02-22 武汉斗鱼网络科技有限公司 一种基于句柄函数的网络账号保护方法及系统
CN107085542A (zh) * 2017-05-05 2017-08-22 深圳慧昱教育科技有限公司 Ipc通信方法和服务器
CN107196848A (zh) * 2017-05-09 2017-09-22 腾讯科技(深圳)有限公司 消息推送方法及装置
CN108683633A (zh) * 2018-04-10 2018-10-19 新华三技术有限公司成都分公司 访问控制方法及装置
CN108984317A (zh) * 2018-06-21 2018-12-11 北京奇虎科技有限公司 进程间通信ipc的实现方法和装置
CN109032817A (zh) * 2018-07-25 2018-12-18 天津凯发电气股份有限公司 一种电能质量管理系统共享内存实现方法
CN111506436A (zh) * 2020-03-25 2020-08-07 炬星科技(深圳)有限公司 实现内存共享的方法、电子设备和共享内存数据管理库

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130061164A1 (en) * 2010-04-30 2013-03-07 Tencent Technology (Shenzhen) Company Limited Method and device for using super taskbar to control instant messaging application
CN106537345B (zh) * 2014-06-13 2020-10-13 皮沃塔尔软件公司 在多进程计算环境中精确跟踪内存使用

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102236510A (zh) * 2010-04-30 2011-11-09 腾讯科技(深圳)有限公司 一种利用超级任务栏控制即时通信软件的方法及设备
CN102769582A (zh) * 2012-08-02 2012-11-07 深圳中兴网信科技有限公司 逻辑服务器、即时通信系统和即时通信方法
WO2015055073A1 (zh) * 2013-10-18 2015-04-23 北京奇虎科技有限公司 一种消息提醒的方法和装置、以及系统
CN104717207A (zh) * 2015-02-09 2015-06-17 惠州Tcl移动通信有限公司 一种信息共享的方法及服务器
CN105204936A (zh) * 2015-09-30 2015-12-30 山东乾云启创信息科技有限公司 常驻进程管理通用平台及方法
CN106446678A (zh) * 2016-09-22 2017-02-22 武汉斗鱼网络科技有限公司 一种基于句柄函数的网络账号保护方法及系统
CN107085542A (zh) * 2017-05-05 2017-08-22 深圳慧昱教育科技有限公司 Ipc通信方法和服务器
CN107196848A (zh) * 2017-05-09 2017-09-22 腾讯科技(深圳)有限公司 消息推送方法及装置
CN108683633A (zh) * 2018-04-10 2018-10-19 新华三技术有限公司成都分公司 访问控制方法及装置
CN108984317A (zh) * 2018-06-21 2018-12-11 北京奇虎科技有限公司 进程间通信ipc的实现方法和装置
CN109032817A (zh) * 2018-07-25 2018-12-18 天津凯发电气股份有限公司 一种电能质量管理系统共享内存实现方法
CN111506436A (zh) * 2020-03-25 2020-08-07 炬星科技(深圳)有限公司 实现内存共享的方法、电子设备和共享内存数据管理库

Also Published As

Publication number Publication date
CN113760569A (zh) 2021-12-07

Similar Documents

Publication Publication Date Title
US10057152B2 (en) Providing an unseen message count across devices
CN109245908B (zh) 一种主从集群切换的方法和装置
CN112579148B (zh) 基于业务代理的业务消息处理方法、装置及电子设备
CN111182019B (zh) 跨平台通信方法及装置、电子设备
CN109783151B (zh) 规则变更的方法和装置
CN113377626B (zh) 基于服务树的可视化统一报警方法、装置、设备和介质
US8984119B2 (en) Changing an event identifier of a transient event in an event notification system
CN110928704B (zh) 消息处理方法、消息处理系统、服务器及计算机存储介质
CN113760569B (zh) 一种多账号管理方法和系统
CN116594752A (zh) 流程调度方法、装置、设备、介质和程序产品
CN113783913A (zh) 一种消息推送管理方法和装置
CN109445966B (zh) 事件处理方法、装置、介质和计算设备
CN115190125A (zh) 一种缓存集群的监控方法和装置
WO2022068203A1 (zh) 用于确定预约信息的方法和装置
CN112463616A (zh) 一种面向Kubernetes容器平台的混沌测试方法和装置
CN113094131A (zh) 提示资源的显示方法、装置、终端、服务器及存储介质
CN113779451A (zh) 一种页面加载方法和装置
CN112463514A (zh) 分布式缓存集群的监测方法和装置
US11838379B2 (en) Tailoring notification posting based on device activity status
CN112596922B (zh) 通信管理方法、装置、设备和介质
CN110262756B (zh) 用于缓存数据的方法和装置
US20230026140A1 (en) Synchronization of notification actions across multiple enrolled devices
CN117389648A (zh) 停机处理方法、装置、计算机设备及存储介质
CN118260095A (zh) 一种服务器管理的方法和装置
CN115208764A (zh) 一种基于资源池的请求响应方法、装置及其介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant