Netty学习——基于Netty的WebSocket协议开发

     基于Netty的WebSocket协议开发

WebSocket简介

        Java的Socket是Java网络编程的基础,Java的Socket是在应用层的,这和C/C++的Socket不同,C/C++的Socket是可以获取TCP头数据的。Socket是一种全双工的通信方式,也就是说通信双方可以同时互发消息,也叫CS模式,而HTTP协议是一种无状态协议,是基于BS模式的,服务器不能主动给客户端发消息,只能由客户端发起请求,服务器给予响应。HTTP的这种BS模式在HTTP的Web1.0和Web2.0还是很好用的,但是现在用户交互越来越丰富,很多时候也需要服务器能够主动给客户端发送消息数据,以此来增加用户体验度,或者是实现实时网络通信的效果。然而由于HTTP的特性,这在以前是个很大的技术难题。有一些产品基于轮询和长连接做出了一些解决方案,比如说gmail的在线聊天。但由于长连接轮询都比较耗资源,不能像Socket那样灵活,因而基于HTTP的这些解决方案都没能得到较好的认可。
      HTML5开始为为浏览器与服务器通信提供WebSocket解决方案并提供了相应的API,WebSocket与Socket非常相似,并且Web Socket和Socket的API风格也非常的相似。在使用WebSocket时,只需要像Socket那样服务器端和客户端进行一次握手操作,就可以生成一个服务器端-客户端数据传输的双向通道,客户端向服务器发送数据的同时服务器也可以向客户端发送数据,因此,WebSocket也是全双工的网络通信模式。WebSocket之所以比HTTP的长连接轮询更优秀,更重要的原因是它和Socket一样对代理、防火墙路由器透明,而且每次的数据传输没有携头部信息以为Cookie之类的额外数据,这样就可以尽量减少网络流量,提高网络通信的效率。
      WebSocket建立连接时,首先客户端会向服务器端发送一个HTTP请求,这个请求包含了一些额外的头部信息,比如"Upgrade:WebSocket"表示这个请求要创建一个WebSocket连接。

用Netty实现WebSocket

      Netty已经实现了WebSocket的细节,我们在使用时只需要创建一个WebSocket的握手对象即可,在接收消息时,要判断消息是普通Http消息还是WebSocket的消息,如果是普通的消息,则通过获取请求头中的Upgrade中的数据,如果是"websocket"的话,就表示这个Http消息是用来创建WebSocket连接的,这时候,就可以创建一个Websocket握手对象。如果消息对象是一个WebSocket消息,就取出其中的内容,进行相应的逻辑处理,最后再写回一个WebScoket消息即完成了一次客户端向服务器请求WebSocket网络通信过程,当然我们也可以主动给客户端发送消息,我们在handler active之后就每秒钟来查询是否已经创建了Web
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值