html5websocket教程,websocket实现
HTMLWebSocket技术介绍-TWaver-ITeye技术网站
HTMLWebSocket技术简介
博客分类:TWaver html5WebSocket是HTML5规范新推出的功能,用于解决浏览器与后端服务器的双向通信问题。利用WebSocket技术,后端可以随时向前端推送消息,保证前端和后端状态的统一,这在传统的无状态HTTP协议中是“不可能”实现的。
在传统的服务器推送技术WebSocket提出之前,为了解决从后台向前台推送消息的需求,提出了一些解决方案。这些解决方案是利用现有技术(如ajax、iframe、flashplayer、java applet等)通过一些灵活的处理实现的。).
简单轮询最简单的就是前台轮询,每隔一段时间就请求后台获取最新状态。这种方法最容易实现,但效果也最差。频繁盲目调用后台带来不必要的开销,实时性无法保证。后台更新了,所以前端需要在下一次轮询中知道。
为了解决这些缺点,长轮询技术得到了发展。轮询请求会在后台被阻塞,相当于保持一个长连接,直到后台更新或者超时,以保证更新的及时性。前端得到请求后,会重新建立轮询连接,等待后台的更新通知。
其他解决方案其他解决方案无非是保持长连接(比如Iframe和htmlfile流),从后台实时获取信息,或者借助第三方插件(flashPlayer、jre)使用flash xmlsocket或java applet socket技术。这些方法不够纯html,这里就不介绍了。更多传统的服务器推送技术,请参考IBM的文章:http://www.ibm.com/developerworks/cn/web/wa-lo-comet/.
WebSocket简介websocket是html5新推出的技术,允许后台随时向前端发送文本或二进制消息。WebSocket是一个全新的协议,不属于http无状态协议。协议名为 ws ,这意味着一个WebSocket连接地址会这样写:ws://t over . com:8080/WebSocketServer。Ws不是http,所以传统的web服务器不一定支持。WebSocket只有在服务器和浏览器都支持的情况下才能正常运行。目前支持还不通用,需要专门的web服务器和现代浏览器。
浏览器对WebSocket的支持谷歌Chrome浏览器最早支持WebSocket,随后是Safari和Firefox,最新版本的Opera和IE(Opera11,IE10)也支持WebSocket。
以下是各大浏览器的支持。Opera11默认关闭WebSocket支持,所以这里不列出。欲了解更多信息,请参考:http://en.wikipedia.org/wiki/WebSocket和http://caniuse.com/#search=websockets.
client WebSocket的主要方法在浏览器支持程度上有所不同,在之前wiki的“浏览器支持”一章中有介绍。按照w3c对WebSocket API的相关规范,浏览器提供了WebSocket类型,即Firefox中的MozWebSocket。要检测浏览器是否支持WebSocket,可以使用以下脚本代码:
检查浏览器是否支持WebSocket。
code js window . web socket=window . web socket window . moz web socket;如果(!窗户。web socket){ alert( websocketnotsupportedbythibrowser );返回;}窗口。WebSocket=window。WebSocket 窗口。MozWebSocket
如果(!窗户。WebSocket){
alert(“此浏览器不支持WebSocket
返回;
}构造函数web socket #构造函数(URL,可选协议)
第一个参数是请求地址,第二个参数是可选的,表示协议名。
使用示例:
code varweb socket=new web socket( ws://127 . 0 . 0 . 1:8080/alarm/alarm server );var web socket=new web socket( ws://127 . 0 . 0 . 1:8080/alarm/alarm server );事件打开/消息/关闭/错误
WebSocket#onopen,onmessage,onclose,onerror
当连接打开时,onopen方法被回调,当收到后台消息时,onmessage事件被触发。后台关闭时,调用onclose,连接异常可以在onerror中捕获。
使用示例:
code jsweb socket . on message=function(evt){ var data=evt . data;} web socket . on message=function(evt){
var data=evt.data
}方法发送/关闭
发送消息web socket # send(数据)
关闭连接web socket # close(可选代码,可选原因)
使用示例:
射流研究…代码web套接字。发送(JSON。stringify({ action: node。remove ,id: 001 });web套接字。发送(JSON。stringify({ action: node。remove ,id: 001 });服务器对WebSocket的支持WebSocket不同于超文本传送协议(超文本传输协议的缩写)协议,传统的网服务器通常不支持WebSocket,比如雄猫目前就不支持(tomcat 7.0.26支持WebSocket了),反倒是一些小众的或者更活跃的网络服务器率先支持WebSocket,如码头,以及基于节点。射流研究…的WebSocket节点扩展,基本上各种编程语言都有相应的服务器可以选择,下图是我列举的几种,详细情况参阅:http://en。维基百科。org/wiki/Comparison _ of _ web socket _ implementions
服务器端编程语言各不相同,具体实现自然也不相同,即使是同一种语言,实现类和接口函数也有很大的差别,比如码头和网状的都是基于爪哇岛语言,但他们的实现类几乎没有相同命名的,下面我以码头(http://www。月食。组织/码头)为例,简单介绍WebSocket相关的类和方法:
码头对WebSocket的实现WebSocketServlet基于小型应用程序标准,增加了doWebSocketConnect(…)方法,为客户端请求创建一个后台对应的WebSocket实例
射流研究…代码org。月食。码头。web套接字。websocketservlet { WebSocketdoWebSocketConnect(http servlet请求,字符串协议)} org。月食。码头。web套接字。websocketservlet
web套接字doWebSocketConnect(http servlet请求请求,字符串协议)
}后台WebSocket类,与客户端WebSocket类对应,能监听打开,消息,关闭等状态变化事件,并包含一个关系属性,用于向客户端发送消息
射流研究…代码org。月食。码头。web套接字。WebSocket组织。月食。码头。web套接字。web套接字。ontext message { void on open(connection connect);voidonClose(intcode,string message);void on message(字符串消息);}组织。月食。码头。web套接字。web套接字
org。月食。码头。web套接字。web套接字。上下文消息
void onOpen(连接连接);
void onClose(int代码,字符串消息);
void消息(字符串消息);
}WebSocket .关系后台连接类,包含于WebSocket对象中,用于向客户端推送消息
射流研究…代码org。月食。码头。web套接字。web套接字。connection { void sendmessage(字符串消息);}组织。月食。码头。web套接字。web套接字。关系
无效发送消息(字符串消息);
}本篇先做介绍,后续将介绍一个WebSocket与TWaver组件结合的实例…
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。