• websocket


    WebSocket protocol是H5的一种新协议,实现了浏览器与服务器的全双工通信,所以可以实现web实时交互。并节省了资源和带宽

    在WebSocket出现之前,一般通过两种方式来实现web实时应用:轮询和流

    轮询:是一种定时的同步调用,客户端向服务器端以固定时间间隔发送请求,查看是否有更新。如果有新的信息,客户端会得到响应,否则服务器返回一个拒绝响应,客户端关闭连接。

    然而实时数据并不总是可预测的,轮询会带来很多不必要的请求,而每次请求都会带有完整的请求头,这样会浪费资源和带宽;轮询是一种低效的实时方案

    长轮询(Comet/反向ajax)客户端向服务端发送请求,并保持一段设定的时间,直到服务端有响应或者设定的时间过期,请求才会关闭。之后,客户端会重新向服务器发送请求

     

    流:在客户端页面使用一个隐藏的窗口(iframe)向服务器发出一个长连接请求(无限或规定的时间段内,一直保持打开),每当服务器端有更新时,就将信息推送至客户端。

    这种方式的缺陷在于:1.要针对不同浏览器改善用户体验。2.服务器不会发送请求完成响应,连接一直打开,对防火墙和代理网络不友好

    websocket:使用javascript调用浏览器API, 发送一个websocket请求到服务器,经过一次握手,和服务器简历TCP通讯。它本质上是一个TCP连接,所以稳定性强、数据传输量小。

    websocket协议基于TCP协议建立一个websocket连接的步骤:

      1.客户端向服务器发送一个特殊http请求,包含了一些附加头信息("Upgrade:WebSocket"),表明这是一个申请协议升级的http请求。

      2.服务端解析并产生应答信息返回客户端,websocket连接建立成功

      3.连接一直打开,直到B/S端的某一方中关闭连接。

    常用接口方法和属性:

    readyState表示四种连接状态:

    0:未连接

    1:连接成功,可通讯

    2:正在关闭

    3:连接已关闭或无法打开

    url代表websocket的服务器网络地址,协议通常是“ws”或“wss(加密)”;send()发送数据到服务端

    close()关闭连接

    onopen(),握手成功触发的事件

    onmessage(),收到服务器消息时触发

    onerror(),异常时触发

    onclose(),关闭连接时触发

    JavaScript调用浏览器接口示例如下:

     1 var wsServer = 'ws://localhost:8888/Demo'; //服务器地址
     2 var websocket = new WebSocket(wsServer); //创建WebSocket对象
     3 websocket.send("hello");//向服务器发送消息
     4 alert(websocket.readyState);//查看websocket当前状态
     5 websocket.onopen = function (evt) {
     6 //已经建立连接
     7 };
     8 websocket.onclose = function (evt) {
     9 //已经关闭连接
    10 };
    11 websocket.onmessage = function (evt) {
    12 //收到服务器消息,使用evt.data提取
    13 };
    14 websocket.onerror = function (evt) {
    15 //产生异常
    16 }; 

    服务器端对websocket的实现:

  • 相关阅读:
    2-用EasyNetQ连接RabbitMQ(黄亮翻译)
    1-EasyNetQ介绍(黄亮翻译)
    MVC之——Razor语法
    MVC过滤器的用法
    MVC初级知识之——Routing路由
    MVC初级知识之——View与Controller的讲解
    MVC初级教程(四)
    MVC初级教程(三)
    MVC初级教程(二)
    MVC初级教程(一)
  • 原文地址:https://www.cnblogs.com/dll-ft/p/5903941.html
Copyright © 2020-2023  润新知