Cowboy 用户指南 (二十) - The Websocket protocol

Websocket协议

本章将解释什么是Websocket,以及为什么它是软实时Web应用程序的重要组件。

描述

Websocket是对HTTP的扩展,它模拟客户端(通常是Web浏览器)和服务器之间的纯TCP连接。它使用HTTP升级机制建立连接。

Websocket连接是完全异步的,不像HTTP/1.1(同步)和HTTP/2(异步,但是服务器只能发起流来响应请求)。使用Websocket,客户端和服务器都可以在任何时间发送帧而不受任何限制。它比任何HTTP协议都更接近TCP。

Websocket是IETF的标准。Cowboy支持该标准和所有以前由浏览器实现的草案,但不包括最初的有缺陷的草案,有时被称为“版本0”。

Websocket vs HTTP/2

有好几年,Websocket是与服务器进行双向异步连接的唯一方式。当引入HTTP/2时,这种情况发生了改变。HTTP/2要求客户端首先执行一个请求,然后服务器才能推送数据,这只是一个很小的限制,因为客户端可以在连接时这样做。

Websocket被设计成一种到服务器的tcp通道。它只定义了框架和连接管理,并允许开发人员在其上实现协议。例如,你可以通过Websocket实现IRC,并使用Javascript的IRC客户端与服务器对话。

另一方面,HTTP/2只是对HTTP/1.1连接和请求/响应机制的改进。它具有与HTTP/1.1相同的语义。

如果你所需要的只是访问一个HTTP API,那么HTTP/2应该是你的首选。另一方面,如果你需要的是一个不同的协议,那么你可以使用Websocket来实现它。

实现

Cowboy将Websocket作为协议升级实现。一旦从init/2回调执行了升级,Cowboy就切换到Websocket。关于初始化和处理Websocket连接的更多信息,请参考下一章。

Websocket在Cowboy中的实现是使用Autobahn测试套件进行验证的,这是一套涵盖协议所有方面的广泛测试套件。Cowboy 100%成功地通过了套件,包括所有可选测试。

Cowboy的Websocket实现还包括permessage-deflate和x-webkit-deflate-frame压缩扩展。

当从init/2函数返回compress选项时,Cowboy将自动使用compression。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值