本发明属于网络通信领域,具体涉及一种基于WebSocket获取客户端硬件信息的方法。
背景技术:
HTML5技术的日臻成熟和HTML5规范的最终定型,作为一项新兴的技术和具备支持跨平台特性,HTML5越来越受到开发者的欢迎。WebSocket作为HTML5关键技术之一,其支持全双工通信和节省网络带宽的优势,也是开发者们在进行Web应用通信甚至跨平台通信开发时优先选择的通信方式。
在标准WebSocket协议中,WebSocket对象具有的属性和方法比较有限,如:属性值URL、方法send和close等。在开发Web应用过程中,有时候对发送的数据报文需要包含的信息有更多的要求,如:报文中需要包含发起WebSocket请求的客户端相关信息。但是,目前缺乏一种基于WebSocket的通过调用扩展的JavaScript接口获取客户端硬件信息的方法。
此外,由于发送数据报文需要获取而非修改客户端信息,有的客户端信息是受到保护且不可修改的,所以对JavaScript获取相关信息具有一定的安全性要求。
技术实现要素:
本发明的目的在于克服目前WebSocket对象中没有包含获取客户端硬件信息的属性的缺陷,提出了一种基于WebSocket获取客户端硬件信息的方法,该方法通过调用扩展的JavaScript接口实现WebSocket对象获取客户端硬件信息,而且该方法的安全性高,确保客户的硬件信息不能被修改。
为了实现上述目的,本发明提供了一种基于WebSocket的获取客户端硬件信息的方法,所述方法包括:
步骤1)对通用WebSocket对象扩展自定义JavaScript接口函数;
步骤2)客户端创建WebSocket对象,并建立与服务器的连接,调用所述步骤1)的扩展自定义JavaScript接口函数;
步骤3)Web引擎内核根据WebSocket对象调用的接口函数获取相应设备硬件信息,返回给客户端;
步骤4)客户端将返回的设备硬件信息包含在数据报文中发送到服务器;
步骤5)所述服务器对数据报文进行处理,并根据设备硬件信息将处理结果返回到客户端;
步骤6)客户端根据返回的处理结果继续对服务器发送数据报文,直至通信完毕;
步骤7)通信完毕后,关闭WebSocket连接。
上述技术方案中,所述步骤1)具体包括:
步骤1-1)在浏览器内核中,对通用WebSocket对象添加JavaScript接口属性值或方法;
步骤1-2)定义步骤1-1)扩展的JavaScript接口属性值或方法在浏览器内核的函数映射关系,映射到浏览器内部自定义函数;
步骤1-3)在步骤1-2)的内部自定义函数中,调用WebSocket协议实现的扩展自定义的获取设备硬件信息的函数;
步骤1-4)在WebSocket协议实现内部,添加自定义的获取设备硬件信息函数;
所述自定义的获取设备硬件信息函数为WebSocket对象的自定义属性值或方法,调用后返回特定值作为用户所请求的客户端设备硬件信息;所述设备硬件信息为MAC地址、IP地址或设备ID。
上述技术方案中,所述步骤2)的扩展自定义JavaScript接口函数为步骤1-4)的自定义的获取设备硬件信息函数。
本发明的优势在于:
1、本发明的方法通过在浏览器内核扩展基于WebSocket协议的JavaScript接口,调用接口可获得客户端硬件信息,如MAC地址、IP地址、设备ID等,并作为数据报文的一部分发送到服务器;该方法适用于服务器要求获取客户端信息作为标识的情况,特别是在多客户端多平台联动操作的情况下有较高的实用价值;
2、本发明的方法基于WebSocket实现,而WebSocket是HTML5协议的重要组成部分,其具备HTML5的跨平台特性,在跨平台通信方面有较大的优势;
3、本发明的方法将获取客户端信息的方法封装于WebSocket协议中,通过WebSocket对象调用的方式获取只读的属性值或函数返回值,用户只能获取而不能修改客户端信息,能够较大的保证客户端信息的安全性。
附图说明
图1是本发明的基于WebSocket获取客户端硬件信息的方法的示意图;
图2是本发明的自客户端JavaScript到浏览器内核WebSocket协议的函数调用过程图。
具体实施方式
下面结合附图和具体实施例对本发明做进一步详细地说明。
如图1所示,一种基于WebSocket的获取客户端硬件信息的方法,所述方法具体包括:
步骤1)对通用WebSocket对象扩展自定义JavaScript接口;
所述通用WebSocket对象为客户端创建的所有WebSocket对象;
如图2所示,所述步骤1)具体包括:
步骤1-1)在浏览器内核中,对通用WebSocket对象添加JavaScript接口属性值或方法;
步骤1-2)定义步骤1-1)扩展的JavaScript接口属性值或方法在浏览器内核的函数映射关系,映射到浏览器内部自定义函数;
步骤1-3)在步骤1-2)的内部自定义函数中,调用WebSocket协议实现的扩展自定义的获取设备硬件信息的函数;
步骤1-4)在WebSocket协议实现内部,添加自定义的获取设备硬件信息函数;
所述自定义的获取设备硬件信息函数为WebSocket对象的自定义属性值或方法,调用后返回特定值作为用户所请求的客户端设备硬件信息。
所述设备硬件信息为MAC地址、IP地址或设备ID。
步骤2)客户端创建WebSocket对象,并建立与服务器的连接,调用所述步骤1)的扩展JavaScript接口函数;
所述扩展自定义JavaScript接口函数为所述步骤1-4)的自定义的获取设备硬件信息函数。
步骤3)Web引擎内核根据WebSocket对象调用的接口函数获取相应设备硬件信息,返回给客户端;
步骤4)客户端将返回的设备硬件信息包含在数据报文中发送到服务器;
步骤5)所述服务器对数据报文进行处理,并根据设备硬件信息将处理结果返回到客户端;
步骤6)客户端根据返回的处理结果继续对服务器发送数据报文,直至通信完毕;
步骤7)通信完毕后,关闭WebSocket连接。
下面以获取客户端的MAC地址的为例,步骤1)的具体实现过程为:
假设服务器对上报报文格式要求为:
{"operator":"sample","value":"sample","clientMac":"clientMacAddr"}
则客户端JavaScript需要将获取的客户端MAC地址包含于clientMacAddr字段中,关键部分JavaScript编写方式如下:
websocket=new WebSocket(“ws://sample/”);
var clientMacAddr=websocket.DeviceMAC||websocket.getDeviceMAC();
var msg="{\"operator\":\"sample\",\"value\":\"sample\",\"clientMac\":\""+clientMacAddr+"\"}";
websocket.send(msg);
其中,DeviceMAC为WebSocket对象的属性,getDeviceMAC()为WebSocket对象的方法。
浏览器内核对WebSocket对象扩展自定义的JavaScript接口,包括以下部分:
在浏览器内核中,增加WebSocket对象的JavaScript接口属性值DeviceMAC或方法getDeviceMAC();
定义JavaScript接口属性值或方法在浏览器内核的函数映射关系:
DeviceMAC->jsWebSocketDeviceMAC()
getDeviceMAC()->jsWebSocketPrototypeFunctionGetDeviceMAC()
浏览器内核函数实现,调用WebSocket协议内部自定义函数DeviceMAC()或getDeviceMAC();
在WebSocket协议实现内部,添加自定义的函数DeviceMAC()或getDeviceMAC(),实现获取设备信息的功能。以上所述仅为本发明的具体实施方式,并非用于限定本发明的保护范围,本领域的技术人员应当理解,在不脱离发明原理的前提下,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的保护范围中。