本发明涉及计算机技术领域,尤其涉及一种多人游戏的实时通讯方法及系统。
背景技术:
目前,现如今的很多单机手游,很多都会新增联机模式来让各个玩家之间进行互动,以此增加游戏的可玩性。但要实现多人联机,就必须要有服务器。以unity游戏引擎而言,开发者的选择很多。具体地,可以自己搭建服务器,也可以是利用unity自带的networkview,同时,也可选择利用第三方提供的后端服务器。
然而,不论是利用unity自带的networkview,或者是选择第三方后端服务器,都在一定程度上存在着局限性和不可扩展性。而且,很多第三方后端服务器提供的功能较多,插件较大,然而开发者需要用到的可能只有几个功能,这在一定程度上将导致游戏的包体较大。此外,如选择自己搭建服务器,则通常一个游戏对应于一个服务器,如此导致每款游戏的开发过程和后期维护中,需要各自的服务端和客户端配合开发。
有鉴于此,针对上述问题,有必要提出进一步的解决方案。
技术实现要素:
本发明的目的在于提供一种多人游戏的实时通讯方法及系统,以克服现有技术中存在的不足。
为实现上述发明目的,本发明提供一种多人游戏的实时通讯方法,其包括如下步骤:
s1、请求连接并访问游戏的主服务器;
s2、通过主服务器提供可供选择的若干子服务器,连接并访问选定的子服务器;
s3、与由选定的子服务器所覆盖的其他玩家通过挂载在游戏对象上的观察者脚本组件发送消息,并通过子服务器转发该发送的消息;
s4、对发送的消息进行判断,如满足接收条件,则远程调用子服务器中的函数进行实时通讯,并对接收的消息进行逻辑处理。
作为本发明的多人游戏的实时通讯方法的改进,所述主服务器将供选择的若干子服务器以游戏房间列表的形式发送至客户端供玩家选择。
作为本发明的多人游戏的实时通讯方法的改进,所述主服务器实时更新所述游戏房间列表的信息。
作为本发明的多人游戏的实时通讯方法的改进,所述观察者脚本组件具有多个观察属性,多个观察属性包括同步游戏对象的位置、旋转角度和缩放比例。
作为本发明的多人游戏的实时通讯方法的改进,所述发送的消息中包括调用的函数名及函数的参数。
为实现上述发明目的,本发明提供一种多人游戏的实时通讯系统,其包括:
访问模块,其用于实现:
请求连接并访问游戏的主服务器;
选择模块,其用于实现:
通过主服务器提供可供选择的若干子服务器,连接并访问选定的子服务器;
消息发送模块,其用于实现:
与由选定的子服务器所覆盖的其他玩家通过挂载在游戏对象上的观察者脚本组件发送消息,并通过子服务器转发该发送的消息;
判断调用模块,其用于实现:
对发送的消息进行判断,如满足接收条件,则远程调用子服务器中的函数进行实时通讯,并对接收的消息进行逻辑处理。
作为本发明的多人游戏的实时通讯系统的改进,所述选择模块还用于实现:
通过所述主服务器将供选择的若干子服务器以游戏房间列表的形式发送至客户端供玩家选择。
作为本发明的多人游戏的实时通讯系统的改进,所述选择模块还用于实现:
通过所述主服务器实时更新所述游戏房间列表的信息。
作为本发明的多人游戏的实时通讯系统的改进,所述观察者脚本组件具有多个观察属性,多个观察属性包括同步游戏对象的位置、旋转角度和缩放比例。
作为本发明的多人游戏的实时通讯系统的改进,所述发送的消息中包括调用的函数名及函数的参数。
与现有技术相比,本发明的有益效果是:本发明基于一个主服务器和多个子服务器实现了服务端与客户端的解耦,使得服务器只负责客户端之间的数据的转发,客户端负责数据的逻辑处理,克服了游戏开发和维护时,需要服务端和客户端配合开发的问题。
附图说明
图1为本发明的多人游戏的实时通讯方法一具体实施方式的方法流程示意图。
具体实施方式
下面结合附图所示的各实施方式对本发明进行详细说明,但应当说明的是,这些实施方式并非对本发明的限制,本领域普通技术人员根据这些实施方式所作的功能、方法、或者结构上的等效变换或替代,均属于本发明的保护范围之内。
如图1所示,本发明提供一种多人游戏的实时通讯方法,其包括如下步骤:
s1、请求连接并访问游戏的主服务器。
其中,玩家连接并访问游戏的主服务器时,将以玩家登录游戏大厅的形式实现,所述主服务器同时与若干子服务器相连接,任一上述子服务器则对应于游戏大厅中的若干游戏房间。
s2、通过主服务器提供可供选择的若干子服务器,连接并访问选定的子服务器。
其中,主服务器提供可供选择的若干子服务器时,所述主服务器将供选择的若干子服务器以游戏房间列表的形式发送至客户端供玩家选择。同时,当子服务器新增或变更时,其对应的游戏房间被创建或删除。此时,所述主服务器实时更新所述游戏房间列表的信息。其具体表现为:上述游戏的大厅会跟随实时刷新。此外,客户端创建了一个房间后,根据需要还可以对房间进行多个属性的设置,比如设置密码、游戏难度、人数上限等。
s3、与由选定的子服务器所覆盖的其他玩家通过挂载在游戏对象上的观察者脚本组件发送消息,并通过子服务器转发该发送的消息。
其中,为了能够确保消息能够发送和接收成功,还需要确保该消息发送方和接收方一直存在在游戏中。同时,发送的消息可以为同一个房间内的客户端互相发送网络信息,还可以发送缓存消息。此外,缓存消息也将被发送到未来连接进来的玩家,比如有新的玩家进入游戏房间。
所述观察者脚本组件具有多个观察属性,多个观察属性包括同步游戏对象的位置、旋转角度和缩放比例,上述观察属性可供开发者进行自由选择。上述观察者脚本组件可采用现有通用的用于实现发送消息的脚本组件。
s4、对发送的消息进行判断,如满足接收条件,则远程调用子服务器中的函数进行实时通讯,并对接收的消息进行逻辑处理。
如此,服务器只负责客户端之间的数据的转发,客户端负责数据的逻辑处理,从而克服了游戏开发和维护时,需要服务端和客户端配合开发的问题。此外,为了函数的调用,所述发送的消息中包括调用的函数名及函数的参数。从而,当判断满足接收条件后,依据发送消息中的函数名及其参数进行调用。同时,消息的接收方调用函数后,则被调用的函数可以始终以与其相匹配的客户端为目标。
基于如上所述的多人游戏的实时通讯方法,本发明还提供一种多人游戏的实时通讯系统,其包括:访问模块、选择模块、消息发送模块、判断调用模块。
所述访问模块用于实现:请求连接并访问游戏的主服务器。
具体地,所述访问模块基于玩家的设备终端。此时,玩家连接并访问游戏的主服务器时,以玩家登录游戏大厅的形式实现,所述主服务器同时与若干子服务器相连接,任一上述子服务器则对应于游戏大厅中的若干游戏房间。
所述选择模块用于实现:通过主服务器提供可供选择的若干子服务器,连接并访问选定的子服务器。
具体地,所述选择模块基于玩家所在的玩家所在的网络运营商等。此时,所述主服务器将供选择的若干子服务器以游戏房间列表的形式发送至客户端供玩家选择。同时,当子服务器新增或变更时,其对应的游戏房间被创建或删除。此时,所述主服务器实时更新所述游戏房间列表的信息。其具体表现为:上述游戏的大厅会跟随实时刷新。此外,客户端创建了一个房间后,根据需要还可以对房间进行多个属性的设置,比如设置密码、游戏难度、人数上限等。
所述消息发送模块用于实现:与由选定的子服务器所覆盖的其他玩家通过挂载在游戏对象上的观察者脚本组件发送消息,并通过子服务器转发该发送的消息。
其中,所述消息发送模块基于游戏对象上的观察者脚本组件。具体地,所述观察者脚本组件具有多个观察属性,多个观察属性包括同步游戏对象的位置、旋转角度和缩放比例,上述观察属性可供开发者进行自由选择。上述观察者脚本组件可采用现有通用的用于实现发送消息的脚本组件。
此外,为了能够确保消息能够发送和接收成功,还需要确保该消息发送方和接收方一直存在在游戏中。同时,发送的消息可以为同一个房间内的客户端互相发送网络信息,还可以发送缓存消息。此外,缓存消息也将被发送到未来连接进来的玩家,比如有新的玩家进入游戏房间。
所述判断调用模块用于实现:对发送的消息进行判断,如满足接收条件,则远程调用子服务器中的函数进行实时通讯,并对接收的消息进行逻辑处理。
具体地,所述访问模块基于玩家的设备终端,其可用于实现数据的逻辑处理以及函数的调用。如此,服务器只负责客户端之间的数据的转发,客户端负责数据的逻辑处理,从而克服了游戏开发和维护时,需要服务端和客户端配合开发的问题。
此外,为了函数的调用,所述发送的消息中包括调用的函数名及函数的参数。从而,当判断满足接收条件后,依据发送消息中的函数名及其参数进行调用。同时,消息的接收方调用函数后,则被调用的函数可以始终以与其相匹配的客户端为目标。
综上所述,本发明基于一个主服务器和多个子服务器实现了服务端与客户端的解耦,使得服务器只负责客户端之间的数据的转发,客户端负责数据的逻辑处理,克服了游戏开发和维护时,需要服务端和客户端配合开发的问题。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。