当前位置: 首页 > 工具软件 > Cowboy > 使用案例 >

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

管翼
2023-12-01

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。

 类似资料: