Android 源码系列之<十五>,深入浅出WebSocket,打造自己的即时聊天交互系统<上>

       转载请注明出处:http://blog.csdn.net/llew2011/article/details/53056165

       做Java开发的小伙伴们应该对Socket比较熟悉,在J2SE的Socket编程这一章节中专门对Socket通信做了详细介绍,当时自学完该章节后只知道Socket是端到端通信的,Server端根据指定端口打开Socket链接,然后等待客户端来连接;客户端根据Server端IP地址和端口创建一个Socket通道,根据该通道和Server端进行通信。后来在工作中有使用Socket通信,使用场景是聊天和推送,当时为了项目进度就在GitHub上找了一个不错的开源库autobahn-java中应用在项目中,功能实现之后并没有继续深入理解WebSocket协议。恰好现在项目又使用到了WebSocket通信,因此决定仔细研究一下Socket通信的底层相关知识并记录下来,希望能给小伙伴们一点帮助,如果你对Socket变成非常熟悉了,请跳过本文(*^__^*) ……

       背景

       以前,很多网站为了实现推动技术,所用的技术都是轮训(例如:AJax)。轮训是在特定的时间间隔(例如每隔5秒),由浏览器对服务器发送HTTP请求,然后服务器收到浏览器请求后把相关最新数据返回客户端浏览器(注意:也可能没有最新数据)。这种传统的轮训模式带来很明显的缺点,即浏览器需要不断的向服务器发出HTTP请求,然而HTTP请求可能包含较长的头部,其真正有效的数据可能只是很小的一部分,显然这样会浪费很多的宽带等资源;假如某次请求时服务器端并没有最新数据需要返回给客户端,那么这次请求等同于无效的,那么怎么才能实现客户端能及时的收到服务器端最新数据又能占用很少的网络宽带资源呢?

       在这种情况下,HTML5定义了WebSocket协议,该协议是一种在单个TCP连接上进行全双工通讯的协议,IETF(Internet Engineering Task Force,互联网工程小组)在2011年把这套协议定为RFC 6455标准,并被RFC7936所补充规范。因此WebSocket API 也被W3C订为标准。

       WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务器端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要要完成一个握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

       根据WebSocket的概念,我们可以总结以下两点:

  • TCP基础上
  • 全双工通信

       那么什么是全双工通信了?

       通信方式可以分为两种,一种是半双工通信,一种是全双工通信。半双工通信指的是在某一个时间点上只有发送数据或者接收数据发生这一个行为发生。而全双工通信是相对于半双工通信来讲的,全双工通信允许发送数据和接收数据同时发生。

       WebSocket使用ws或者是wss的统一资源标识符,类似于HTTP和HTTPS,其中wss表示在TLS之上的WebSocket,如下所示:

ws://127.0.0.1:80/wsapi
wss://127.0.0.1:443/wsapi
       WebSocket如果没有运行在TLS之上时默认使用和HTTP相同的80端口,当运行在TLS之上时,默认使用443端口。

       WebSocket的协议内容详见

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值