本技术涉及网络通讯,特别涉及一种网络通讯连接建立方法、应用、系统、存储介质及设备。
背景技术:
1、在unity开发的游戏客户端导出为 h5(网页) 版本时,面临以下技术问题:
2、h5版本无法使用系统原生的tcp连接,而网游类型的游戏,数据通信需要实现类似tcp的全双工通信。在原生h5游戏中,需要使用二次封装的websocket协议来实现游戏数据的通信,和unity内可以使用的基于tcp的通信方式不兼容。
3、市面上已有的相似的方案是:websocket-sharp。该方案可以给c#项目提供直接使用websocket的能力,但是这个方案是c#的原生方案,仅对c#可用的运行环境生效。对于unity而言,当发布平台是web时,c#最终会被编译成wasm,此时websocket-sharp所提供的websocket会失效。因此,如果使用websocket-sharp,也无法在其上做面向web平台的兼容开发。
技术实现思路
1、本技术为解决上述技术问题,提供一种具有较好的兼容性的网络通讯连接建立方法、应用、系统、存储介质及设备。
2、具体的,本技术提供一种网络通讯连接建立方法,包括以下步骤:
3、获取当前运行环境,并判断当前运行环境是否是webgl环境,若是,则启用websocket;否则启用tcpsocket。
4、当启用的是websocket时,通过websocketmanager类调用websocketproxy,c#与js进行数据交互,以建立网络通讯连接。
5、当启用的是tcpsocket时,通过tcpsocketmanager类调用socket,以根据所述socket建立网络通讯连接。
6、在上述技术方案中,根据当前环境选择合适的网络通讯方式,适应不同平台和环境的需求;支持websocket和tcpsocket两种通讯方式,兼容各种网络设备和协议,使得开发者不再需要关心网络层的兼容性问题,专注于业务逻辑开发即可,提供了较大的灵活性和降低维护成本;通过websocketmanager类和websocketproxy(c#与js的数据交互)或tcpsocketmanager类和socket进行数据交互,实现可靠的网络通讯连接;该方法可以扩展到支持更多的网络通讯方式或协议,以满足不同的需求。
7、在获取当前运行环境之前,还包括:预先定义isocketmanager接口。
8、在上述技术方案中,通过isocketmanager接口定义网络通讯连接的方法和属性,可以方便地扩展新的网络通讯连接方式;isocketmanager接口提供了一种统一的契约,规定了网络通讯连接的行为和功能,这样可以使得不同的网络通讯连接方式具有一致的方法和属性,便于统一管理和使用;通过预先定义isocketmanager接口,将网络通讯连接的具体实现与使用代码解耦,使得在改变具体实现时不影响使用代码的逻辑。
9、启用websocket后,具体为:
10、基于isocketmanager接口创建websocketmanager类,并通过所述websocketmanager类调用websocketproxy。
11、将所述websocketproxy与websocket建立连接,并接收来自websocket的交互指令,以根据所述交互指令控制c#与js的数据交互。
12、所述数据交互包括c#对js的调用和js对c#的回调。
13、在上述技术方案中,通过使用websocketmanager类和websocketproxy,能够方便地建立websocket连接,实现实时的双向数据通讯;通过websocket连接,可以实现c#对js的调用和js对c#的回调,实现复杂的数据交互逻辑;通过基于isocketmanager接口创建websocketmanager类,实现了统一的接口管理,方便代码的维护和扩展。
14、所述c#对js的调用包括:
15、在c#内通过extern关键字和dllimport属性注册第一预设外部函数,并在js内定义第一预设外部函数。
16、调用il2cpp将c#侧的第一预设外部函数转换至原生层下的第二预设外部函数,以桥接emscripten。
17、通过websocketmanager类调用c#内第一预设外部函数,并通过所述emscripten调用js内的第一预设外部函数,以根据所述第一预设外部函数完成网络通讯连接的建立。
18、在上述技术方案中,通过将c#的调用转换为原生层下的外部函数,再通过emscripten调用js内的函数,实现了c#对js的跨平台调用,适用于不同的开发环境和技术栈;借助c#和js的互相调用,实现了多语言间的交互,这使得可以灵活地利用各自的优势和功能来完成网络通讯连接的建立;通过注册和定义外部函数的方式,方便扩展和添加新的调用功能,满足不同的需求,具有较强灵活性和扩展性。
19、所述js对c#的回调包括:
20、在c#内定义预设委托,通过monopinvokecallback属性对所述预设委托进行标注,并以在原生层下生成原生方法。
21、分别在c#和js内定义预设接口,并将所述预设委托传递给js。
22、在js内将所述预设委托传入原生方法,并调用所述预设委托,以根据所述预设委托完成网络通讯连接的建立。
23、在上述技术方案中,通过定义预设委托和预设接口,实现了js对c#的跨语言回调,使得c#能够在特定事件触发时被js调用,完成特定的操作;通过在c#和js之间传递预设委托,实现了多语言的互相调用,增强了系统的灵活性和互操作性;预设委托的定义可以根据具体的需求进行扩展和修改,以满足不同的回调需求。
24、基于同一构思,本技术还提供一种网络通讯连接建立方法的应用,包括:
25、将websocket和tcpsocket引入目标unity工程中,并创建socketmanager对象。
26、根据所述socketmanager对象连接服务器,并判断连接是否成功,若成功,则通过调用所述socketmanager对象注册和服务器通信的协议回调;否则提示连接失败。
27、在上述技术方案中,通过引入websocket和tcpsocket,可以根据实际需求选择合适的网络通讯方式,适用于不同类型的应用场景;创建socketmanager对象可以提供强大的通讯功能,包括连接服务器、发送和接收数据等操作,这样可以满足各种网络通讯需求;通过判断连接是否成功,并在连接失败时进行相应的处理,增强了连接管理的可靠性和稳定性;该方法适用于unity工程,并且可以方便地集成和使用,unity提供了丰富的开发工具和环境,使得网络通讯连接的建立更加便捷。
28、基于同一构思,本技术还提供一种网络通讯连接建立方法的系统,所述系统包括:
29、判断模块:用于获取当前运行环境,并判断当前运行环境是否是webgl环境。
30、启用模块:用于根据所述判断模块的判断结果启用websocket或tcpsocket。
31、第一建立模块:用于当启用的是websocket时,通过websocketmanager类调用websocketproxy,c#与js进行数据交互,以建立网络通讯连接。
32、第二建立模块:用于当启用的是tcpsocket时,通过tcpsocketmanager类调用socket,以根据所述socket建立网络通讯连接。
33、在上述技术方案中,通过判断当前运行环境并动态选择启用websocket或tcpsocket,使得系统在不同的运行环境下具备灵活的适应性和扩展性;通过判断当前运行环境并动态选择启用websocket或tcpsocket,使得系统在不同的运行环境下具备灵活的适应性和扩展性;通过websocketmanager和tcpsocketmanager类,系统提供了可靠的连接管理和数据传输功能,确保与后端服务器之间的有效通讯和数据交换。
34、所述系统还包括:
35、定义模块:用于预先定义isocketmanager接口。
36、在上述技术方案中,通过isocketmanager接口定义网络通讯连接的方法和属性,可以方便地扩展新的网络通讯连接方式;isocketmanager接口提供了一种统一的契约,规定了网络通讯连接的行为和功能,这样可以使得不同的网络通讯连接方式具有一致的方法和属性,便于统一管理和使用;通过预先定义isocketmanager接口,将网络通讯连接的具体实现与使用代码解耦,使得在改变具体实现时不影响使用代码的逻辑。
37、基于同一构思,本技术还提供一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行所述的网络通讯连接建立方法。
38、基于同一构思,本技术还提供一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现所述的网络通讯连接建立方法。
39、与现有技术相比,本技术的有益效果在于:
40、本技术在获取到当前运行环境后,判断当前运行环境是否是webgl环境,若是,则启用websocket;否则启用tcpsocket;并当启用的是websocket时,通过websocketmanager类调用websocketproxy,c#与js进行数据交互,以建立网络通讯连接;以及当启用的是tcpsocket时,通过tcpsocketmanager类调用socket,以根据所述socket建立网络通讯连接。本技术根据当前环境选择合适的网络通讯方式,适应不同平台和环境的需求;并且兼容各种网络设备和协议,使得开发者不再需要关心网络层的兼容性问题,专注于业务逻辑开发即可,提供了较大的灵活性和降低维护成本;该方法可以扩展到支持更多的网络通讯方式或协议,以满足不同的需求。本技术解决了现有技术中使用websocket-sharp导致的仅对c#可用的运行环境生效,进而造成兼容性较差的技术问题。