HTTP是一种无状态的协议,,由客户端请求和服务端响应组成。HTTP实际上是比较特殊的网络协议。
大多数基于因特网的网络连接通常包含长连接和基于TCP套接字的双向消息交换。让不信任的客户端脚本访问底层的TCP套接字是不安全的,但是WebSocket API定义了一种安全方案:它允许客户端代码在客户端和支持WebSocket协议的服务器端创建双向的套接字类型的连接。这让某些网络操作会变得更加简单。
WebSocket API通过WebSocket()构造函数创建一个套接字:
var socket = new WebSocket("ws://ws.example.com:1234/resource");
该构造函数的参数是一个URL,使用ws://协议或wss://协议。
创建了套接字之后,通常需要在上面注册一个事件处理程序:
socket.onopen = function(e) { /*套接字已经连接*/};socket.onclose = function(e) { /*套接字已经关闭*/};socket.onerror = function(e) { /*出错了*/};socket.onmessage = function(e) { var message = e.data;/*服务器发送一条消息*/};
为了通过套接字发送数据给服务器,可以调用套接字的send()方法:
socket.send("Hello,server!");
当完成和服务器的通信后,可以通过close()方法来关闭WebSocket。
WebSocket完全是双向的,并且一旦建立了WebSocket连接,客户端和服务端都可以在任何时候互相传递消息,与此同时,这种通信机制采用的不是请求和响应的形式。每个基于WebSocket的服务都要定义自己的“子协议”,用于在客户端和服务端传输数据。