消息中心的布点,是通过WEBSOCKET与后端服务器建立长连接的方式实现的,这种方式的优点一是节约网络带宽,二是用户可以实时的收到由后台发过来的消息,后端的实现采用的是NETTY,经过压力测试,每台服务器可以承受50万的长连接,也就是同时50万个用户(只为每个网站用户建立一个长连接),性能上还是比较好的。
要建立长连接,首先需要由客户端发起与服务端的握手动作,以下是从wikipedia找的一个示例:
浏览器请求:
GET /demo HTTP/1.1Host: example.comConnection: UpgradeSec-WebSocket-Key2: 12998 5 Y3 1 .P00Sec-WebSocket-Protocol: sampleUpgrade: WebSocketSec-WebSocket-Key1: 4 @1 46546xW%0l 1 5Origin: http://example.com^n:ds[4U
在请求中的“Sec-WebSocket-Key1”, “Sec-WebSocket-Key2”和最后的“^n:ds[4U”都是随机的,服务器端会用这些数据来构造出一个16字节的应答。其中:^n:ds[4U为请求的内容,其它的都是http请求头。
注:Sec-WebSocket-Key1和Sec-WebSocket-Key2在旧的WEBSOCKET协议中是没有的,因为判断当前请求是否WEBSOCKET,主要还是通过请求头中的Connection是不是等于Upgrade以及Upgrade是否等于WebSocket,也就是说判断一个请求是否WEBSOCKET请求,只需要判断请求头中的Connection及Upgrade,判断新旧版本可以通过是否包含“Sec-WebSocket-Key1”和“Sec-WebSocket-Key2”。以下是一小段判断是否WEBSOCKET请求的代码:
//注:代码是基于Netty的