一种消息传输方法、装置、系统和存储介质与流程

未命名 09-19 阅读:86 评论:0


1.本技术涉及数据处理领域,尤其涉及一种消息传输方法、装置、系统和存储介质。


背景技术:

2.现有的消息传输技术中,发送方(客户端)和接收方(服务器)在传输消息时,发送方会在发给接收方的消息中携带自己的id信息,但这个id信息由发送方确定,可以是任意字符,所以可能会出现非法发送方伪造身份来发送消息的情况。
3.这就造成无论是谁作为发送方,接收方都需要根据发送方发送的通信请求来对发送方进行验证,然后再对通信请求进行处理,极大程度的降低了通信效率,增加了客户端与服务器建立消息通信的难度。


技术实现要素:

4.本技术公开了一种消息传输方法、装置、系统和存储介质,用于降低客户端与服务器建立消息通信的难度。
5.本技术第一方面提供了一种消息传输方法,包括:
6.接收第一客户端发送的通信请求,第一客户端具有第一身份信息;
7.调用认证连接列表,根据第一身份信息识别第一客户端是否位于认证连接列表中;
8.若位于,则直接响应通信请求,建立与第一客户端的通信通道并进行通信;
9.若不位于,则根据通信请求为第一客户端建立一个第一临时身份标识;
10.根据通信请求的任务等级判断是否需要对第一客户端进行身份验证;
11.若需要,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据;
12.根据验证消息判断通信请求是否合法;
13.若合法,则调用第一函数重新命名第一客户端,生成新的第一身份信息;
14.响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信。
15.可选的,调用第一函数重新命名第一客户端,生成新的第一身份信息,包括:
16.调用第一函数重新命名第一客户端,生成新的客户端身份标识;
17.将新的客户端身份标识保存在第一身份信息中以生成新的第一身份信息,并将新的第一身份信息存入认证连接列表。
18.可选的,响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信,包括:
19.响应通信请求,为第一客户端建立通信通道;
20.将新的第一身份信息映射到通信通道上。
21.可选的,调用认证连接列表,根据第一身份信息识别第一客户端是否位于认证连
接列表中,包括
22.根据认证连接列表内的客户端身份标识与通信请求判断第二客户端是否匹配;
23.若不匹配,则确定第一客户端为未认证客户端;
24.若匹配,则确定第一客户端为已认证客户端。
25.可选的,在将新的第一身份信息映射到通信通道上之后,消息传输方法还包括:
26.通过通信通道接收第一客户端发送的目标消息,目标消息包含npl信息和发送方身份信息;
27.对目标消息进行拆包处理,恢复npl消息,npl消息包含目标文件的文件名称,目标文件为第一客户端需要调用的文件;
28.将npl消息插入第一线程的输入消息队列,第一线程为服务器上的线程,输入消息队列用于管理npl消息;
29.执行npl消息,使得文件名称对应的目标文件得到执行。
30.可选的,通信请求还包含socket信息;
31.响应通信请求,为第一客户端建立通信通道,包括:
32.查询通信请求中的socket信息,通过迭代器并根据socket信息接收到的错误代码来遍历端点;
33.检测通过socket信息遍历到的端点集合的匹配程度,生成匹配结果;
34.当匹配结果显示端点集合均无法连接时,则向第一客户端发送连接失败通知;
35.当匹配结果显示端点集合存在可连接的端点时,则通过可连接的端点与第一客户端建立通信通道,再向第一客户端发送连接成功通知。
36.可选的,在根据通信请求的任务等级判断是否需要对第一客户端进行身份验证之后,消息传输方法还包括:
37.若不需要,则使用第一临时身份标识为第一客户端执行通信请求。
38.本技术第二方面提供了一种消息传输装置,包括:
39.第一接收单元,用于接收第一客户端发送的通信请求,第一客户端具有第一身份信息;
40.第一判断单元,用于调用认证连接列表,根据第一身份信息识别第一客户端是否位于认证连接列表中;
41.第一建立单元,用于当第一判断单元确定第一客户端位于认证连接列表中,则直接响应通信请求,建立与第一客户端的通信通道并进行通信;
42.第二建立单元,用于当第一判断单元确定第一客户端不位于认证连接列表中,则根据通信请求为第一客户端建立一个第一临时身份标识;
43.第二判断单元,用于根据通信请求的任务等级判断是否需要对第一客户端进行身份验证;
44.获取单元,用于当第二判断单元确定需要对第一客户端进行身份验证时,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据;
45.第三判断单元,用于根据验证消息判断通信请求是否合法;
46.生成单元,用于当第三判断单元确定通信请求合法时,则调用第一函数重新命名第一客户端,生成新的第一身份信息;
47.第三建立单元,用于响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信。
48.可选的,生成单元,包括:
49.调用第一函数重新命名第一客户端,生成新的客户端身份标识;
50.将新的客户端身份标识保存在第一身份信息中以生成新的第一身份信息,并将新的第一身份信息存入认证连接列表。
51.可选的,第三建立单元,包括:
52.响应模块,用于响应通信请求,为第一客户端建立通信通道;
53.映射模块,用于将新的第一身份信息映射到通信通道上。
54.可选的,第一判断单元,包括
55.根据认证连接列表内的客户端身份标识与通信请求判断第二客户端是否匹配;
56.若不匹配,则确定第一客户端为未认证客户端;
57.若匹配,则确定第一客户端为已认证客户端。
58.可选的,在第三建立单元之后,消息传输装置还包括:
59.第二接收单元,用于通过通信通道接收第一客户端发送的目标消息,目标消息包含npl信息和发送方身份信息;
60.拆包单元,用于对目标消息进行拆包处理,恢复npl消息,npl消息包含目标文件的文件名称,目标文件为第一客户端需要调用的文件;
61.插入单元,用于将npl消息插入第一线程的输入消息队列,第一线程为服务器上的线程,输入消息队列用于管理npl消息;
62.第一执行单元,用于执行npl消息,使得文件名称对应的目标文件得到执行。
63.可选的,通信请求还包含socket信息;
64.响应模块,包括:
65.查询通信请求中的socket信息,通过迭代器并根据socket信息接收到的错误代码来遍历端点;
66.检测通过socket信息遍历到的端点集合的匹配程度,生成匹配结果;
67.当匹配结果显示端点集合均无法连接时,则向第一客户端发送连接失败通知;
68.当匹配结果显示端点集合存在可连接的端点时,则通过可连接的端点与第一客户端建立通信通道,再向第一客户端发送连接成功通知。
69.可选的,在第二判断单元之后,消息传输装置还包括:
70.第二执行单元,用于当第二判断单元确定不需要对第一客户端进行身份验证时,则使用第一临时身份标识为第一客户端执行通信请求。
71.本技术第三方面提供了一种消息传输系统,装置包括:
72.处理器、存储器、输入输出单元以及总线;
73.处理器与存储器、输入输出单元以及总线相连;
74.存储器保存有程序,处理器调用程序以执行第一方面以及第一方面中任一项可选的消息传输方法。
75.本技术第四方面提供了一种计算机可读存储介质,计算机可读存储介质上保存有程序,程序在计算机上执行时执行第一方面以及第一方面中任一项可选的消息传输方法。
76.从以上技术方案可以看出,本技术具有以下优点:
77.本技术中,首先接收第一客户端发送的通信请求,其中,第一客户端具有第一身份信息。通过调用认证连接列表,并且根据通信请求中的第一身份信息识别第一客户端是否位于认证连接列表中。若位于,则直接响应通信请求,建立与第一客户端的通信通道并进行通信。若不位于,则根据通信请求为第一客户端建立一个第一临时身份标识。根据通信请求的任务等级判断是否需要对第一客户端进行身份验证。若需要,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据。根据验证消息判断通信请求是否合法。若合法,则调用第一函数重新命名第一客户端,生成新的第一身份信息。响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信。
78.本技术通过接收到第一客户端的通信信息时,首先确认第一客户端是否存在过认证,当第一客户端不存在认证之后,根据通信请求为第一客户端建立一个第一临时身份标识,,使得客户端在未认证的情况下,也可以使用该临时身份标识进行通信请求的执行。当通信请求需要进行身份认证时,并且提供了验证之后,服务器会重新为第一客户端进行命名,并且基于新的第一身份信息建立与第一客户端的通信通道,服务器能够通过新的第一身份信息和第一客户端进行通信。该方式能够减少认证任务的同时,降低客户端与服务器建立消息通信的难度。
附图说明
79.为了更清楚地说明本技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
80.图1为本技术提供的消息传输方法一个实施例流程示意图;
81.图2-a、图2-b、图2-c和图2-d为本技术提供的消息传输方法另一个实施例流程示意图;
82.图3为本技术提供的消息传输装置一个实施例结构示意图;
83.图4为本技术提供的消息传输装置另一个实施例结构示意图;
84.图5为本技术提供的消息传输系统另一个实施例结构示意图。
具体实施方式
85.以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本技术实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本技术。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本技术的描述。
86.应当理解,当在本技术说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
87.还应当理解,在本技术说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
88.如在本技术说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下
文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0089]
另外,在本技术说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
[0090]
在本技术说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本技术的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
[0091]
现有的信息传输技术中,无论是谁作为发送方,接收方都需要根据发送方发送的通信请求来对发送方进行验证,然后再对通信请求进行处理,极大程度的降低了通信效率,增加了客户端与服务器建立消息通信的难度。
[0092]
基于此,本技术公开了一种消息传输方法、装置、系统和存储介质,用于在消息传输过程中先给发送方(客户端)生成一个临时身份标识,根据所处理的通信请求的等级来决定身份是否需要进行验证,如果不需要,则直接使用临时身份标识为npl发送方进行npl服务,如果需要,在验证通过之后,为发送方进行重新命名生成发送方身份信息,以新的发送方身份信息与发送方进行程序信息传输,极大程度的提高了通信效率,降低客户端与服务器建立消息通信的难度。
[0093]
下面将结合本技术实施例中的附图,对本技术中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
[0094]
本技术的方法可以应用于服务器、设备、终端或者其它具备逻辑处理能力的设备,对此,本技术不作限定。为方便描述,下面以执行主体为服务器为例进行描述。
[0095]
请参阅图1,本技术提供了一种消息传输方法的一个实施例,包括:
[0096]
101、接收第一客户端发送的通信请求,第一客户端具有第一身份信息;
[0097]
通信请求为服务器通过网页或是链接方式接收到的数据。第一客户端可以从网页或是链接等多种方式中想服务器发出对应的任务请求。下文中,通信请求主要出现在不同的代码函数或是语句中,可以简写为msg。
[0098]
本实施例中,在npl运行环境中,可以实现在远程npl运行环境上执行指定的文件这样的任务。在一次远程调度中涉及到两个npl运行环境,本技术中的第一客户端是调度者,而本技术中的服务器是则被调度者。这种跨npl运行环境的线程调度功能的实现依赖于npl.activate函数,使用该函数的语法如下:
[0099]
npl.activate(url,msg)
[0100]
上述语法中,参数url是指一个npl文件的url地址,参数msg是指发送给url地址上的数据(通信请求),用户(客户端)通过调用npl.activate函数就能够调用指定的目标线程,并通过该目标线程执行指定的目标文件。
[0101]
参数url代表一个npl文件的url地址,参数url完整的格式为:
[0102]
(sruntimestatename|gl)msg.nid:srelativepath@dnsservername
[0103]
其中,sruntimestatename是所选择线程的名称,如果选择不写sruntimestatename而是只写gl,那么表示本地当前的线程。
[0104]
msg.nid表示npl运行环境的标识符,在本技术中,msg.nid则为远程npl运行环境(服务器)的标识符。
[0105]
srelativepath为文件的相对路径,一般以main文件夹目录作为参考。
[0106]
@sdnsservername表示dns服务器的名称。
[0107]
需要说明的是,npl运行环境对应着cnplruntime类,cnplruntime类中主要有以下属性:一个线程向量,用以储存当前npl运行环境中的所有线程;一个cnplnetserver类,如果调用该类中的start()函数,则会启动服务器(即监听一个端口号),那么该npl运行环境也就变成了服务器端,否则就是客户端。实现远程调度的前提是作为被调度端的npl运行环境需要开启相应的服务器端,以便能够被客户端访问到。开启服务器端可以用如下函数:
[0108]
npl.startnetserver(ip,port)函数,参数ip为ip地址,参数port为端口号。npl引擎在设计的时候都带有一个服务器端,对应与源代码中的cnplnetserver类,需要提供服务器的功能的时候就开启。
[0109]
当用户调用npl.activate函数之后,第一客户端接收线程启动指令,并根据该线程启动指令启动客户端上的第一线程,该第一线程用于远程调度服务器执行服务器上的目标文件,该第一线程由npl.activate函数所指定。
[0110]
102、调用认证连接列表,根据第一身份信息识别第一客户端是否位于认证连接列表中;
[0111]
服务器调用认证连接列表,认证连接列表内记录了直径进行通信连接认证的用户身份信息,根据第一身份信息识别第一客户端是否位于认证连接列表中。
[0112]
103、若位于,则直接响应通信请求,建立与第一客户端的通信通道并进行通信;
[0113]
104、若不位于,则根据通信请求为第一客户端建立一个第一临时身份标识;
[0114]
当服务器确定第一客户端为未经过认证的用户时,服务器即可根据通信请求为第一客户端建立一个临时身份标识。例如当通信请求为创建链接请求(通信请求),服务器会临时产生一个tid(临时身份标识),它的命名规则是:~加链接的数量,比如服务器产生的第一条临时链接,它的tid=”~1”。本实施例中,临时身份标识可以被表示为msg.tid。
[0115]
105、根据通信请求的任务等级判断是否需要对第一客户端进行身份验证;
[0116]
服务器需要根据第一客户端发送到通信请求中的具体任务进行分析,通过任务的等级进行分别处理,如果通信请求不需要涉及保密内容的提取,也不需要进行付费等,则不需要验证客户端的身份信息,只需要通过临时身份标识进行信息交互。
[0117]
106、若需要,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据;
[0118]
当检测到通信请求涉及需要进行身份验证的任务时,并且第一客户端为首次发生通信请求时,则服务器需要首先确定通信请求中的验证消息,并且确认验证消息是否准确。
[0119]
本实施例中,验证消息可以是多种,可以是简单的账号密码,也可以是客户端用户专属二维码等,此处不作限定。
[0120]
本实施例中,验证消息可以是通信请求中的,也可以是用户黄旭发送到服务器的,此处不作限定。
[0121]
107、根据验证消息判断通信请求是否合法;
[0122]
服务器通过该验证消息确定当前第一客户端发送的通信请求是否符合处理规则,如果合法则执行步骤108。
[0123]
如果服务器确定客户端不存在于服务器的认证连接列表中,则服务器可以先为客户端建立一条虚拟连接,在这个虚拟连接上并不传输真实的数据,而是通过该虚拟连接来检测服务器与客户端之间的连接是否可靠,具体可以通过一些网络质量参数的阈值来确定连接是否可靠,比如通过该连接的丢包率、时延、带宽、qos、重传机制、心跳检测机制等信息中的一项或多项指标来检测。当丢包率低、或时延低、或带宽高、或qos指标高、或具有重传机制、或具有心跳检测机制等,就认为连接可靠(合法),相反则不可靠(不合法)。
[0124]
当服务器确定与客户端之间的虚拟连接可靠时,则将该虚拟连接转换为实际连接,并将这条连接添加到服务器所维护的认证连接列表中。
[0125]
需要说明的是,该认证连接列表还可以由管理人员手动配置,比如在公司局域网中,管理人员可以将客户端的连接信息手动加入该列表,由此确保未加入列表的客户端不能连接服务器,从而保证安全。同样的,还可以从认证连接列表中删除指定的记录,由此来拒绝一些客户端的连接。
[0126]
108、若合法,则调用第一函数重新命名第一客户端,生成新的第一身份信息;
[0127]
如服务器确定客户端发送的通信请求需要进行身份验证,并且验证消息合法时,则服务器调用npl.accept函数重新命名第一客户端,并且通过新的命名为第一客户端执行通信请求。
[0128]
109、响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信。
[0129]
当认证通过,服务器使用新的第一身份信息为第一客户端建立一个专属的通信通道。并且发送建立通信成功通知,并且通过新的命名为第一客户端执行通信请求。
[0130]
本实施例中,首先接收第一客户端发送的通信请求,其中,第一客户端具有第一身份信息。通过调用认证连接列表,并且根据通信请求中的第一身份信息识别第一客户端是否位于认证连接列表中。若位于,则直接响应通信请求,建立与第一客户端的通信通道并进行通信。若不位于,则根据通信请求为第一客户端建立一个第一临时身份标识。根据通信请求的任务等级判断是否需要对第一客户端进行身份验证。若需要,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据。根据验证消息判断通信请求是否合法。若合法,则调用第一函数重新命名第一客户端,生成新的第一身份信息。响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信。
[0131]
本技术通过接收到第一客户端的通信信息时,首先确认第一客户端是否存在过认证,当第一客户端不存在认证之后,根据通信请求为第一客户端建立一个第一临时身份标识,使得客户端在未认证的情况下,也可以使用该临时身份标识进行通信请求的执行。当通信请求需要进行身份认证时,并且提供了验证之后,服务器会重新为第一客户端进行命名,并且基于新的第一身份信息建立与第一客户端的通信通道,服务器能够通过新的第一身份信息和第一客户端进行通信。该方式能够减少认证任务的同时,降低客户端与服务器建立
消息通信的难度。
[0132]
请参阅图2,本技术提供了一种消息传输方法的一个实施例,包括:
[0133]
201、接收第一客户端发送的通信请求,第一客户端具有第一身份信息;
[0134]
本实施例中,步骤201与前述实施例步骤101类似,此处不再赘述。
[0135]
202、根据认证连接列表内的客户端身份标识与通信请求判断第二客户端是否匹配;
[0136]
203、若不匹配,则确定第一客户端为未认证客户端;
[0137]
204、若匹配,则确定第一客户端为已认证客户端;
[0138]
服务器会根据通信请求中是否有重新命名的发送方身份信息,或者是新的客户端身份标识,该发送方身份信息是否存在于认证连接列表中而确定第一客户端是否为认证过的用户。
[0139]
205、若位于,则直接响应通信请求,建立与第一客户端的通信通道并进行通信;
[0140]
206、若不位于,则根据通信请求为第一客户端建立一个第一临时身份标识;
[0141]
207、根据通信请求的任务等级判断是否需要对第一客户端进行身份验证;
[0142]
本实施例中,步骤205至步骤207与前述实施例步骤103至步骤105类似,此处不再赘述。
[0143]
208、若不需要,则使用第一临时身份标识为第一客户端执行通信请求;
[0144]
本实施例中,如果通信请求本身并不需要进行保密数据的调用以及付费,则无需进一步验证,只需要按照现有的第一临时身份标识即可完成第一客户端发送到服务器的通信请求。
[0145]
209、若需要,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据;
[0146]
210、根据验证消息判断通信请求是否合法;
[0147]
211、若合法,则调用第一函数重新命名第一客户端,生成新的客户端身份标识;
[0148]
212、将新的客户端身份标识保存在第一身份信息中以生成新的第一身份信息,并将新的第一身份信息存入认证连接列表;
[0149]
本实施例中,当服务器认为通信请求是合法的时,就会执行npl.accept(msg.tid,msg.nid)指令,将该客户端进行创新命名。即将这个命名写入msg.nid中,并且后续还会将新的命名映射到tcp连接(通信通道)上,这时对应的将临时身份标识msg.tid删除,增加内存。重新命名过程生成的第一发送方身份信息会存入认证连接列表中。
[0150]
213、查询通信请求中的socket信息,通过迭代器并根据socket信息接收到的错误代码来遍历端点;
[0151]
214、检测通过socket信息遍历到的端点集合的匹配程度,生成匹配结果;
[0152]
215、当匹配结果显示端点集合均无法连接时,则向第一客户端发送连接失败通知;
[0153]
216、当匹配结果显示端点集合存在可连接的端点时,则通过可连接的端点与第一客户端建立通信通道,再向第一客户端发送连接成功通知;
[0154]
本实施例中,建立连接需要首先进行解析,然后连接,接下来进行写入与读取的环节,然后停止结束。其中解析部分是先查询socket的信息,它会接收一个错误代码,如果错
误代码为0,迭代器遍历每个端点尝试建立连接。端点是使用某个端口连接到的一个地址,不同了类型的socket有自己的socket类。
[0155]
然后在连接时也会接收一个错误代码,如果错误代码为0,则开始连接,否则将会检测其他的端点,如果没有任何端点可连接,则直接提示warning,然后停止连接。本实施例中的匹配结果就是对每一个端点是否能进行连接的判定结果。
[0156]
接下来的读取和写入分别是在连接后读取服务端消息及向服务端写入消息的函数,可以并行执行。最后停止是在连接断开后将socket关闭的函数。
[0157]
当要进行客户端与服务端交互时,在建立好连接后,则开启交互,然后会设置compression并将活跃的连接加入到事件调度器中。
[0158]
本实施例中,使用dispatcher事件调度器,在事件调度时,经历了创建连接、通过nid获取nplconnection、添加nplconnection、异步调度等操作。其中最重要的是事件调度器对消息的调度。
[0159]
消息调度部分首先对三种消息类型进行判断,第一种为来自底层的消息,第二种为npl网络消息,其他则为http消息。msg包含从发送方接受的消息加上发送者的source id。对于未经身份验证的发送方,source id会存在msg.tid中,msg.tid是一个自动生成的数字字符串如“~1”。接收方可以一直使用这个暂时的id:msg.tid返回消息。如果为第一种消息,事件调度器则会再次判断其访问文件所在的npl runtime端口是否暴露出来,如果暴露出来,则添加nid或tid使得与线程连接建立;若没有暴露出来则报错。
[0160]
217、将新的第一身份信息映射到通信通道上;
[0161]
本实施例中,服务器会使用第一客户端在认证连接列表中的发送方身份信息,将发送方身份信息映射到tcp连接上,以使得后续第一客户端可以利用该发送方身份信息进行信息交互中的验证。
[0162]
本实施例中,当服务器认为通信请求是合法的时,并且也找到了可连接的端点之后,就会执行npl.accept(msg.tid,msg.nid)指令,将该客户端进行创新命名。即将这个命名写入msg.nid中,并且还会将新的命名映射到tcp连接上,这时对应的将临时身份标识msg.tid删除,增加内存。
[0163]
本实施例中,npl.accept的一个作用是去区分经过身份验证和未经身份验证的发送方,同时,我们可以尽早的通过调用npl.reject(msg.tid)来拒绝未经身份验证的消息来节省cpu的循环,即当验证未通过,或者是连接无法完成,则可以使用该函数进行拒绝建立消息通道。
[0164]
218、通过通信通道接收第一客户端发送的目标消息,目标消息包含npl信息和发送方身份信息;
[0165]
219、对目标消息进行拆包处理,恢复npl消息,npl消息包含目标文件的文件名称,目标文件为第一客户端需要调用的文件;
[0166]
220、将npl消息插入第一线程的输入消息队列,第一线程为服务器上的线程,输入消息队列用于管理npl消息;
[0167]
221、执行npl消息,使得文件名称对应的目标文件得到执行。
[0168]
本实施例中,需要说明的是,由于是远程调度,所以本技术中的目标文件是指远程npl运行环境(服务器)上的文件。要想让服务器上的文件能够被其他npl运行环境(客户端)
访问到,必须先把该文件添加到当前npl环境的公共文件列表中,这个公共文件列表由服务器的调度器维护。将文件添加到文件列表可以借助npl.addpublicfile(filename,id)函数,filename为文件名,id为文件的编号。如:
[0169]-》npl.addpublicfile(“script/test/test.lua”,1)表示将test.lua文件加入公共文件列表,并且将编号设为1。
[0170]
客户端可以通过该公共文件列表访问到目标文件的文件名称,客户端在获取到目标文件的文件名称后,则使用该名称构造一个npl消息。
[0171]
本实施例中,在客户端通过tcp连接向服务器发送npl消息前,需要对该消息进行tcp封装,加上tcp的包头和其他tcp协议字段。因此客户端需要先对构造出的npl消息进行tcp封装,以得到目标消息。
[0172]
这时服务器即可通过tcp连接接收客户端发送的目标消息,目标消息包含npl信息和发送方身份信息。服务器在接收到该目标消息后,由于目标消息是经过tcp封装的消息,因此服务器需要先对该目标消息进行拆包处理,从而恢复出该npl消息。
[0173]
服务器将恢复出的npl消息插入第一线程的输入消息队列中,npl消息在该输入消息队列中等待被激活和执行。第一线程的输入消息队列管理着该线程需要处理的npl信息队列,越靠前的消息将越先被处理。
[0174]
服务器按照队列顺序取出并处理输入消息队列中的消息,当执行到该npl消息时,服务器则执行目标文件,由此实现客户端对服务器上目标文件的远程调度。
[0175]
当检测到通信请求涉及需要进行身份验证的任务时,则服务器需要从通信请求中获取到发送方身份信息,其中,发送方身份信息为客户端的唯一身份标识,发送方身份信息可以表示为msg.nid。
[0176]
例如:当客户端发生了通信请求msg后,客户端首先需要和服务器建立一条tcp连接,具体的,客户端需要先向服务器发送通信请求,该请求中携带有客户端的npl标识符,即客户端的msg.nid。
[0177]
一个服务器端的npl运行环境可能需要和不止一个的客户端npl运行环境进行交互,这时候就涉及服务器端的npl运行环境对客户端的npl标识符的管理问题。
[0178]
为了解决上述问题,可以在服务器端中维护一个认证连接列表,该认证连接列表用于管理允许与服务器进行tcp连接的客户端名单,列表中的每条记录可以是一个从服务器tcp连接到客户端msg.nid的键值对,服务器在接收到客户端发送的tcp连接请求后,根据请求中携带的客户端msg.nid在该认证连接列表中匹配,如果匹配成功则表示客户端存在于服务器的认证连接列表中,此时即可建立客户端与服务器之间的tcp连接,如果匹配失败则表示客户端不存在于服务器的认证连接列表这种,此时需要进一步确定是否需要建立连接。
[0179]
本实施例中,msg包含从发送方接受的消息加上发送者的source id。对于未经身份验证的发送方,source id会存在msg.tid中,msg.tid是一个自动生成的数字字符串如“~1”。接收方可以一直使用这个暂时的id:msg.tid返回消息。
[0180]
接受方也可以通过调用npl.accept(msg.tid,nid_name)来重命名这个暂时的msg.id,所以如果下次接收方从同一个发送方获得了一个消息(例如相同的tcp连接),msg.nid会包含最后分配的名称同时msg.tid不再存在。我们通常使用npl.accept去区分经
过身份验证和未经身份验证的发送方,并且尽早的通过调用npl.reject(msg.tid)来拒绝未经身份验证的消息来节省cpu的循环。
[0181]
msg.tid或msg.nid经常连接到一个单独的低层的tcp连接,因此它们的名字被分享到所有的进程中的神经元文件。例如:你在一个神经元文件中接收了,其他所有神经元文件接收到的形式都为msg.nid。
[0182]
因为安全性的原因,所有神经元文件可以在同一进程中被其他文件激活。这包括在同一进程的其他线程中的脚本。
[0183]
为了将脚本暴露给远程电脑,有两件事需要做:第一个是通过监听一个ip地址和端口来开启npl服务端,npl对所有的对话都使用tcp协议第二个是告诉npl runtime给出的文件是公共神经元文件。例如:
[0184]
npl.startnetserver("0.0.0.0",8080);
[0185]
npl.addpublicfile(filename,id);
[0186]
其中“0.0.0.0”代表所有的ip地址,也可以使用“127.0.0.1”,“localhost”或其他任何ip地址;“8080”是端口数字。选择你想用的就可以。npl.addpublicfile第二个参数是整数,它是代表长文件名保存带宽而被传输的。所以如果你添加多个公共文件的话它必须是独一无二的。
[0187]
本实施例中需要注意的是,文件的名称必须要和工作目录相对应,例如:npl.addpublicfile(“script/test/test.lua”,1)。绝对路径在当时是不支持的。
[0188]
本实施例中,首先接收第一客户端发送的通信请求,其中,第一客户端具有第一身份信息。根据认证连接列表内的客户端身份标识与通信请求判断第二客户端是否匹配。若不匹配,则确定第一客户端为未认证客户端。若匹配,则确定第一客户端为已认证客户端。若位于,则直接响应通信请求,建立与第一客户端的通信通道并进行通信。若不位于,则根据通信请求为第一客户端建立一个第一临时身份标识。根据通信请求的任务等级判断是否需要对第一客户端进行身份验证。若不需要,则使用第一临时身份标识为第一客户端执行通信请求。若需要,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据。根据验证消息判断通信请求是否合法。若合法,则调用第一函数重新命名第一客户端,生成新的客户端身份标识,将新的客户端身份标识保存在第一身份信息中以生成新的第一身份信息,并将新的第一身份信息存入认证连接列表。查询通信请求中的socket信息,通过迭代器并根据socket信息接收到的错误代码来遍历端点。检测通过socket信息遍历到的端点集合的匹配程度,生成匹配结果。当匹配结果显示端点集合均无法连接时,则向第一客户端发送连接失败通知。当匹配结果显示端点集合存在可连接的端点时,则通过可连接的端点与第一客户端建立通信通道,再向第一客户端发送连接成功通知。将新的第一身份信息映射到通信通道上。
[0189]
通过通信通道接收第一客户端发送的目标消息,目标消息包含npl信息和发送方身份信息。对目标消息进行拆包处理,恢复npl消息,npl消息包含目标文件的文件名称,目标文件为第一客户端需要调用的文件。将npl消息插入第一线程的输入消息队列,第一线程为服务器上的线程,输入消息队列用于管理npl消息。执行npl消息,使得文件名称对应的目标文件得到执行。
[0190]
本技术通过接收到第一客户端的通信信息时,首先确认第一客户端是否存在过认
证,当第一客户端不存在认证之后,根据通信请求为第一客户端建立一个第一临时身份标识,使得客户端在未认证的情况下,也可以使用该临时身份标识进行通信请求的执行。当通信请求需要进行身份认证时,并且提供了验证之后,服务器会重新为第一客户端进行命名,并且基于新的第一身份信息建立与第一客户端的通信通道,服务器能够通过新的第一身份信息和第一客户端进行通信。该方式能够减少认证任务的同时,降低客户端与服务器建立消息通信的难度。
[0191]
本实施例通过接收到第一客户端的通信请求时为第一客户端进行第一临时身份标识的建立,使得客户端在未认证的情况下,也可以使用该临时身份标识进行通信请求的执行。当通信请求需要进行身份认证时,并且提供了验证之后,服务器会重新为第一客户端进行命名,后续第一客户端如果还需要进行任务,服务器能够通过第一发送方身份信息和第一客户端进行交互。该方式能够减少认证任务的同时,降低npl消息传输中cpu的循环。
[0192]
其次,通过设计出临时身份标识msg.tid和发送方身份信息msg.nid的消息结构,简化了建立消息通讯的验证过程,并且通过npl.accept()/npl.reject()/npl.activate()三个函数,同意了消息通讯的判断和传送接口;由此,极大程度的降低了客户端和服务器建立消息通讯的难度。
[0193]
请参阅图3,本技术提供了一种消息传输装置的一个实施例,包括:
[0194]
第一接收单元301,用于接收第一客户端发送的通信请求,第一客户端具有第一身份信息;
[0195]
第一判断单元302,用于调用认证连接列表,根据第一身份信息识别第一客户端是否位于认证连接列表中;
[0196]
第一建立单元303,用于当第一判断单元确定第一客户端位于认证连接列表中,则直接响应通信请求,建立与第一客户端的通信通道并进行通信;
[0197]
第二建立单元304,用于当第一判断单元确定第一客户端不位于认证连接列表中,则根据通信请求为第一客户端建立一个第一临时身份标识;
[0198]
第二判断单元305,用于根据通信请求的任务等级判断是否需要对第一客户端进行身份验证;
[0199]
获取单元306,用于当第二判断单元确定需要对第一客户端进行身份验证时,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据;
[0200]
第三判断单元307,用于根据验证消息判断通信请求是否合法;
[0201]
生成单元308,用于当第三判断单元确定通信请求合法时,则调用第一函数重新命名第一客户端,生成新的第一身份信息;
[0202]
第三建立单元309,用于响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信。
[0203]
请参阅图4,本技术提供了一种消息传输装置的一个实施例,包括:
[0204]
第一接收单元401,用于接收第一客户端发送的通信请求,第一客户端具有第一身份信息;
[0205]
第一判断单元402,用于调用认证连接列表,根据第一身份信息识别第一客户端是否位于认证连接列表中;
[0206]
可选的,第一判断单元402,包括
[0207]
根据认证连接列表内的客户端身份标识与通信请求判断第二客户端是否匹配;
[0208]
若不匹配,则确定第一客户端为未认证客户端;
[0209]
若匹配,则确定第一客户端为已认证客户端。
[0210]
第一建立单元403,用于当第一判断单元402确定第一客户端位于认证连接列表中,则直接响应通信请求,建立与第一客户端的通信通道并进行通信;
[0211]
第二建立单元404,用于当第一判断单元402确定第一客户端不位于认证连接列表中,则根据通信请求为第一客户端建立一个第一临时身份标识;
[0212]
第二判断单元405,用于根据通信请求的任务等级判断是否需要对第一客户端进行身份验证;
[0213]
第二执行单元406,用于当第二判断单元405确定不需要对第一客户端进行身份验证时,则使用第一临时身份标识为第一客户端执行通信请求;
[0214]
获取单元407,用于当第二判断单元405确定需要对第一客户端进行身份验证时,则获取通信请求中的验证消息,验证消息为第一客户端的发送的身份标识验证数据;
[0215]
第三判断单元408,用于根据验证消息判断通信请求是否合法;
[0216]
生成单元409,用于当第三判断单元408确定通信请求合法时,则调用第一函数重新命名第一客户端,生成新的第一身份信息;
[0217]
可选的,生成单元409,包括:
[0218]
调用第一函数重新命名第一客户端,生成新的客户端身份标识;
[0219]
将新的客户端身份标识保存在第一身份信息中以生成新的第一身份信息,并将新的第一身份信息存入认证连接列表。
[0220]
第三建立单元410,用于响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信;
[0221]
可选的,第三建立单元410,包括:
[0222]
响应模块4101,用于响应通信请求,为第一客户端建立通信通道;
[0223]
可选的,通信请求还包含socket信息;
[0224]
响应模块4101,包括:
[0225]
查询通信请求中的socket信息,通过迭代器并根据socket信息接收到的错误代码来遍历端点;
[0226]
检测通过socket信息遍历到的端点集合的匹配程度,生成匹配结果;
[0227]
当匹配结果显示端点集合均无法连接时,则向第一客户端发送连接失败通知;
[0228]
当匹配结果显示端点集合存在可连接的端点时,则通过可连接的端点与第一客户端建立通信通道,再向第一客户端发送连接成功通知。
[0229]
映射模块4102,用于将新的第一身份信息映射到通信通道上。
[0230]
第二接收单元411,用于通过通信通道接收第一客户端发送的目标消息,目标消息包含npl信息和发送方身份信息;
[0231]
拆包单元412,用于对目标消息进行拆包处理,恢复npl消息,npl消息包含目标文件的文件名称,目标文件为第一客户端需要调用的文件;
[0232]
插入单元413,用于将npl消息插入第一线程的输入消息队列,第一线程为服务器上的线程,输入消息队列用于管理npl消息;
[0233]
第一执行单元414,用于执行npl消息,使得文件名称对应的目标文件得到执行。
[0234]
本技术还提供了一种消息传输系统,请参阅图5,图5为本技术提供的远程npl运行环境的线程调度装置一个实施例,该装置包括:
[0235]
处理器501、存储器502、输入输出单元503、总线504;
[0236]
处理器501与存储器502、输入输出单元503以及总线504相连;
[0237]
存储器502保存有程序,处理器501调用程序以执行如上任一消息传输方法。
[0238]
本技术还涉及一种计算机可读存储介质,计算机可读存储介质上保存有程序,其特征在于,当程序在计算机上运行时,使得计算机执行如上任一消息传输方法。
[0239]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0240]
在本技术所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0241]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0242]
另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0243]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。

技术特征:
1.一种消息传输方法,其特征在于,包括:接收第一客户端发送的通信请求,所述第一客户端具有第一身份信息;调用认证连接列表,根据所述第一身份信息识别所述第一客户端是否位于所述认证连接列表中;若位于,则直接响应所述通信请求,建立与所述第一客户端的通信通道并进行通信;若不位于,则根据所述通信请求为所述第一客户端建立一个第一临时身份标识;根据所述通信请求的任务等级判断是否需要对所述第一客户端进行身份验证;若需要,则获取所述通信请求中的验证消息,所述验证消息为所述第一客户端的发送的身份标识验证数据;根据所述验证消息判断所述通信请求是否合法;若合法,则调用第一函数重新命名所述第一客户端,生成新的第一身份信息;响应所述通信请求,基于新的第一身份信息建立与所述第一客户端的通信通道,并进行通信。2.根据权利要求1所述的消息传输方法,其特征在于,调用第一函数重新命名所述第一客户端,生成新的第一身份信息,包括:调用第一函数重新命名所述第一客户端,生成新的客户端身份标识;将新的客户端身份标识保存在所述第一身份信息中以生成新的第一身份信息,并将新的第一身份信息存入认证连接列表。3.根据权利要求1所述的消息传输方法,其特征在于,所述响应所述通信请求,基于新的第一身份信息建立与所述第一客户端的通信通道,并进行通信,包括:响应所述通信请求,为所述第一客户端建立通信通道;将新的第一身份信息映射到所述通信通道上。4.根据权利要求3所述的消息传输方法,其特征在于,调用认证连接列表,根据所述第一身份信息识别所述第一客户端是否位于所述认证连接列表中,包括根据认证连接列表内的客户端身份标识与所述通信请求判断所述第二客户端是否匹配;若不匹配,则确定所述第一客户端为未认证客户端;若匹配,则确定所述第一客户端为已认证客户端。5.根据权利要求3所述的消息传输方法,其特征在于,在将新的第一身份信息映射到所述通信通道上之后,所述消息传输方法还包括:通过所述通信通道接收所述第一客户端发送的目标消息,所述目标消息包含npl信息和发送方身份信息;对所述目标消息进行拆包处理,恢复npl消息,所述npl消息包含目标文件的文件名称,所述目标文件为所述第一客户端需要调用的文件;将所述npl消息插入第一线程的输入消息队列,所述第一线程为服务器上的线程,所述输入消息队列用于管理所述npl消息;执行所述npl消息,使得所述文件名称对应的目标文件得到执行。6.根据权利要求3所述的消息传输方法,其特征在于,所述通信请求还包含socket信息;
响应所述通信请求,为所述第一客户端建立通信通道,包括:查询所述通信请求中的socket信息,通过迭代器并根据所述socket信息接收到的错误代码来遍历端点;检测通过所述socket信息遍历到的端点集合的匹配程度,生成匹配结果;当匹配结果显示所述端点集合均无法连接时,则向所述第一客户端发送连接失败通知;当匹配结果显示所述端点集合存在可连接的端点时,则通过可连接的端点与所述第一客户端建立通信通道,再向所述第一客户端发送连接成功通知。7.根据权利要求1至6中任一项所述的消息传输方法,其特征在于,在根据所述通信请求的任务等级判断是否需要对所述第一客户端进行身份验证之后,所述消息传输方法还包括:若不需要,则使用所述第一临时身份标识为所述第一客户端执行所述通信请求。8.一种消息传输装置,其特征在于,所述消息传输装置包括:第一接收单元,用于接收第一客户端发送的通信请求,所述第一客户端具有第一身份信息;第一判断单元,用于调用认证连接列表,根据所述第一身份信息识别所述第一客户端是否位于所述认证连接列表中;第一建立单元,用于当第一判断单元确定所述第一客户端位于所述认证连接列表中,则直接响应所述通信请求,建立与所述第一客户端的通信通道并进行通信;第二建立单元,用于当第一判断单元确定所述第一客户端不位于所述认证连接列表中,则根据所述通信请求为所述第一客户端建立一个第一临时身份标识;第二判断单元,用于根据所述通信请求的任务等级判断是否需要对所述第一客户端进行身份验证;获取单元,用于当第二判断单元确定需要对所述第一客户端进行身份验证时,则获取所述通信请求中的验证消息,所述验证消息为所述第一客户端的发送的身份标识验证数据;第三判断单元,用于根据所述验证消息判断所述通信请求是否合法;生成单元,用于当第三判断单元确定所述通信请求合法时,则调用第一函数重新命名所述第一客户端,生成新的第一身份信息;第三建立单元,用于响应所述通信请求,基于新的第一身份信息建立与所述第一客户端的通信通道,并进行通信。9.一种消息传输系统,其特征在于,所述装置包括:处理器、存储器、输入输出单元以及总线;所述处理器与所述存储器、所述输入输出单元以及所述总线相连;所述存储器保存有程序,所述处理器调用所述程序以执行如权利要求1至7中任一项所述消息传输方法。10.一种计算机可读存储介质,所述计算机可读存储介质上保存有程序,所述程序在计算机上执行时执行如权利要求1至7中任一项所述消息传输方法。

技术总结
本申请公开了一种消息传输方法、装置、系统和存储介质,客户端与服务器建立消息通信的难度。本申请包括:接收第一客户端发送的通信请求;调用认证连接列表,根据第一身份信息识别第一客户端是否位于认证连接列表中;若位于,则直接响应通信请求,建立与第一客户端的通信通道并进行通信;若不位于,则根据通信请求为第一客户端建立一个第一临时身份标识;根据通信请求的任务等级判断是否需要对第一客户端进行身份验证;若需要,则获取通信请求中的验证消息;根据验证消息判断通信请求是否合法;若合法,则调用第一函数重新命名第一客户端,生成新的第一身份信息;响应通信请求,基于新的第一身份信息建立与第一客户端的通信通道,并进行通信。并进行通信。并进行通信。


技术研发人员:李西峙
受保护的技术使用者:深圳市大富网络技术有限公司
技术研发日:2023.06.15
技术公布日:2023/9/14
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐