您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > netty-之websocket
NettyWebSocket葛阳2014.7.29WebSocketprotocol是HTML5一种新的协议(protocol)。它是实现了浏览器与服务器全双工通信(full-duplex)。1.什么是websocketWebSocket有webTCP之称,既然是TCP,肯定是用来做通信的,但是它又有不同的地方,WebSocket作为HTML5中新增的一种通信协议,由通信协议和编程API组成,它能够在浏览器和服务器之间建立双向连接,以基于事件的方式,赋予浏览器原生的实时通信能力,来扩展我们的web应用,增加用户体验,提升应用的性能。何谓双向?服务器端和客户端可以同时发送并响应请求,而不再像HTTP的请求和响应。全双工通信又称为双向同时通信,即通信的双方可以同时发送和接受信息的信息交互方式。2.Websocket实现方式(实现方法依赖服务器,不同服务器实现方法不同)Java阵营:Tomcat7和JbossNetty.Net阵营:System.Net.WebSocketsNodejs阵营:Socket.io我们用的是netty的实现方法Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序Netty是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性。3.NettywebSocket实现方式(在web项目中)webSocket是html5新引入的技术,允许后台随时向前端发送文本或者二进制消息,WebSocket是一种全新的协议,不属于http无状态协议,协议名为ws,这意味着一个websocket连接地址会是这样的写法:ws://127.0.0.1:8080/websocket。ws不是http,所以传统的web服务器不一定支持,需要服务器与浏览器同时支持,WebSocket才能正常运行,目前的支持还不普遍,需要特别的web服务器和现代的浏览器。2345678GET/HTTP/1.1Connection:UpgradeHost:127.0.0.1:8088Origin:nullSec-WebSocket-Extensions:x-webkit-deflate-frameSec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==Sec-WebSocket-Version:13Upgrade:websocket2345678HTTP/1.1101SwitchingProtocolsConnection:UpgradeServer:beetlewebsocketserverUpgrade:WebSocketDate:Mon,26Nov201223:42:44GMTAccess-Control-Allow-Credentials:trueAccess-Control-Allow-Headers:content-typeSec-WebSocket-Accept:FCKgUr8c7OsDsLFeJTWrJw6WO8Q=3.NettywebSocket实现方式(在web项目中)这个类的主要作用是进行服务器的一些部署,还有进行bootstrap,这主要是在进行启动配置WebSocketServer.javaWebSocketServerHandler.java这个类主要是封装了我们的处理逻辑。WebSocketServerPipelineFactory.java这是这三个类当中代码最少的类了,主要的作用就是配置pipeline.我们可以看到最后的那个addLast,就是在给这个工厂类添加处理逻辑websocket.html这段代码就是一个JS的WebSocket的调用3.NettywebSocket实现方式(在web项目中)ChannelGroup:channel的组集合,他包含一个或多个open的channel,线程安全,关闭的通道会自动从集合中删除,可以通过ChannelGroup广播消息。write:发送信息给channel的时候bind:绑定一个channel到指定的本地地址channel是负责数据读,写的对象,有点类似于老的io里面的stream。它和stream的区别,channel是双向的,既可以write也可以read包括Upstreamevents和downstreamevents两大块3.Netty实现方式(在web项目中)第一步:在web.xml配置listenerlistenerlistener-classcom.car.web.websocket.WebListener/listener-class/listener3.Netty实现方式第二步:打开网络端口3.Netty实现方式第三步:启动服务器3.Netty实现方式第四步:创建处理数据流的pipeline3.Netty实现方式第五步:客户端发起握手请求在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为“握手”(handshaking)。3.Netty实现方式接收请求,并判断处理3.Netty实现方式第一次请求客户端发送的是http请求,请求头中包含websocket相关的信息,服务器端对请求进行验证:3.Netty实现方式验证成功后,将请求升级为一个websocket连接,之后的通信就进入双向长连接的数据传输阶段。3.Netty实现方式第六步:将建立的通道与用户绑定publicstaticMapString,ChannelGroupmap=newHashMapString,ChannelGroup();map.put(“userid”,recipients;ChannelGrouprecipients=newDefaultChannelGroup();recipients.add(ctx.getChannel());3.Netty实现方式第七步:向指定客户端推送数据ctx.getChannel().write(newTextWebSocketFrame(“一个连接));recipients.write(newTextWebSocketFrame(“一组连接”));ChannelGrouprecipients=newDefaultChannelGroup();recipients.add(ctx.getChannel());将一个握手加到一个组中4.实现了websocket的浏览器:ChromeSupportedinversion4+FirefoxSupportedinversion4+InternetExplorerSupportedinversion10+OperaSupportedinversion10+SafariSupportedinversion5+5.客户端三个方法socket=newWebSocket(ws://+top.location.hostname+:9696/websocket);接收到后台消息socket.onmessage=function(event){};建立连接socket.onopen=function(event){};关闭连接socket.onclose=function(event){};
本文标题:netty-之websocket
链接地址:https://www.777doc.com/doc-4963468 .html