在上一篇文章当中介绍了一下websocket是什么和产生原因以及和http协议的区别,我们今天来讨论一下websocket中的客户端和服务端程序。
1.websocket中的API
我们看一下就websocket JavaScript定义的接口:
[Constructor(in DOMString url, optional in DOMString protocol)]
interface WebSocket {
readonly attribute DOMString URL;
// ready state
const unsigned short CONNECTING = 0;
const unsigned short OPEN = 1;
const unsigned short CLOSED = 2;
readonly attribute unsigned short readyState;
readonly attribute unsigned long bufferedAmount;
// networking
attribute Function onopen;
attribute Function onmessage;
attribute Function onclose;
boolean send(in DOMString data);
void close();
};
WebSocket implements EventTarget;
既然是一个协议就是要有客户端和服务端,服务端每种语言有自己的API
websocket
的作用已经完全可以代替ajax,客户端API和ajax十分相似下面我们来具体的介绍一下:
- onopen,表示和服务器建立链接,建立连接之后才能进入下面的步骤,这个对应于
ajax
open方法 - send,想用户服务器发送数据,对应于
ajax
的send方法 - onmessage,建立连接之后,客户端收到服务器发来的数据,这个而对应
ajax
的responseText - onerror,当连接出现错误的时候,接收错误信息,这个
ajax
里面没有 - onclose,监听消息的关闭,当连接结束的时候出发,这个
ajax
里面没有 - close,主动关闭socket连接
再来介绍一下ready state表示的四种状态(ajax中是五种)
- CONNECTING (0):表示还没建立连接;
- OPEN (1): 已经建立连接,可以进行通讯;
- CLOSING (2):通过关闭握手,正在关闭连接;
- CLOSED (3):连接已经关闭或无法打开;
2.客户端的websocket
2.1 websocket实例
介绍完了API我们就要用这些API去做一些事情,下面我们通过一个实例来应用一下这些方法
var serverAddr = 'ws://localhost:3000';
// 创建一个Socket实例