websocket历史及使用详解

  1. keep-alive 只是客户端的一种建议
    keep-alive是通知服务器,在这个HTTP Request/Responset结束后,不要立即断开TCP连接(注意是TCP连接,和HTTP没有关系),后面的HTTP Request仍然可以通过这个TCP连接继续传送。
    keep-alive只是客户端建议的一种复用TCP连接的方式,至于服务器支持不支持,就由不得客户端了
  1. keep-alive 只是http协议中的一部分
    keep-alivehttp协议中的一部分,也即客户端可以主动的发起request到服务器,服务器只能被动的response给客户端。
  1. 什么是ajax轮询
    ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息
    打个比方:
    
    客户端:啦啦啦,有没有新信息(Request)
    服务端:没有(Response
    客户端:啦啦啦,有没有新信息(Request)
    服务端:没有。。(Response
    客户端:啦啦啦,有没有新信息(Request)
    服务端:你好烦啊,没有啊。。(Response
    客户端:啦啦啦,有没有新消息(Request
    服务端:好啦好啦,有啦给你。(Response
    客户端:啦啦啦,有没有新消息(Request
    服务端:。。。。。没。。。。没。。。没有(Response ---- loop
  1. 什么是long poll?
    long pollajax差不多,原理都是采用轮询的方式。只不过long poll是采取的阻塞的方式去轮询。也即客户端发起一个请求连接,这个连接会阻塞住,直到服务端有了消息,才会response给客户端
    
    long pull 虽然降低了服务器的负载,但是需要服务器有很高的并发能力才可以。
而目前处理高并发的模型基本都是异步非阻塞的模型(比如nginx)
  1. websocket协议解析
    1). 握手
    客户端向服务端发起连接请求
    在请求服务器的时候,发送了这样的request header
    
    
    Connection:Upgrade #通知服务器协议升级

    Upgrade:websocket  #协议升级为websocket协议

    Host:0.0.0.0:9501  #升级协议的服务主机:端口地址

    Sec-WebSocket-Key:K8o1cNIxO2pR6inTIDBSgg== #传输给服务器的key

    Sec-WebSocket-Version:13 #websocket协议版本13
    Sec-WebSocket-Key有什么用呢?
    客户端将这个key发送给服务器,服务器将这个key进行处理,将处理后的key返回给客户端,客户端根据这个key是否正确来判断是否建立连接。
    
    2). 服务端返回握手应答
    
    websocket协议状态码是101.(表示协议切换成功)
    
    
    
    Connection:Upgrade #协议升级成功

    Sec-WebSocket-Accept:GnoYH/ip/ZMh+a5rX5P/YR6e68g= #服务端处理之后的key

    Sec-WebSocket-Version:13#websocket 协议版本号

    Upgrade:websocket#协议升级为websocket

  1. 数据传输
    1Chrome/Firefox/高版本IE/Safari等浏览器内置了JS语言的WebSocket客户端
    2、可以使用一些扩展来实现websocket客户端。如phpswoole

发表评论

电子邮件地址不会被公开。 必填项已用*标注