HTTP VS WEBSOCKET

HTTP和WEBSOCKET是现在主流的两个网络协议,下面我们对其进行介绍和比较。

HTTP(S)协议

HTTP(S): Hypertext Transfer Protocol (Secure), (安全)超文本传输协议。HTTP和HTTPS的主要区别是HTTPS传输数据时是加密的,而HTTP不加密,所以下面我们都以HTTP来进行讲解。
HTTP协议定义了客户端与服务器之间的通信内容及交互方式。客户端与服务器之间以请求,响应的方式进行交互,即由客户端向服务器端发出请求消息,服务器收到请求消息后执行客户请求并返回请求数据。

其中请求消息包含两部分:请求什么资源, 进行什么操作

  • 请求什么资源,即具体访问服务器的哪个文件或者程序。这个是通过URL(统一资源定位符)指定的,其格式如下:
    http: + // + Web服务器名 + / + 访问文件目录 + / + 文件名
    http: 表示以 http 协议访问Web服务器,// 后面是服务器域名,域名后面是要访问资源在服务器的具体路径。
    如, http://api.mixin.one/network/snapshots/8f5b244e-cf86-4374-8eaa-c551fd70cd83
    表示通过http协议,访问 api.mixin.one服务器上面的文件"network/snapshots/8f5b244e-cf86-4374-8eaa-c551fd70cd83"。其在服务器上面的存储路径名为:network/snapshots/8f5b244e-cf86-4374-8eaa-c551fd70cd83。
    其中文件名可以省略,如果省略则会访问服务器事先设置的默认文件

  • 进行什么操作,即希望服务器完成什么样的操作。HTTP协议定义了很多方法用来向服务器发出请求。其中最常用的是GET和POST 两种方法。

    • GET, 返回URL指定的信息,如果URL指定的是具体文件,则返回该文件内容,如果指定的是某个程序,则返回改程序的执行结果。
      通过GET方法发送请求时,可以在URL的后面附加一些参数一同发给服务器。
      其格式为 URL?key1=value1&key2=value2 key为参数名,value为参数值,参数之间以&隔开,参数和URL之间以'?' 隔开
      如,我们想从MIXIN获取2018-05-29号0点之后的10条快照,其命令如下:
      "https://api.mixin.one/network/snapshots?limit=10&offset=2018-05-29"
      其中 URL为"https://api.mixin.one/network/snapshots", 参数为limit,offset,参数的值依次为10, 2018-05-29

    • POST, 从客户端向服务器端发送数据。
      当有大量数据需要发送给服务器,或者数据中包含敏感数据时通常通过POST方法发送。
      POST发送请求时,其数据的发送形式与GET不同。POST是以--data参数的形式来发送数据。
      如,当我们向某个用户转账时,需要将具体的转账金额,收账人等信息发送给服务器,其形式如下:
      curl "https://api.mixin.one/transfers" -X POST --data '{"amount":"10","asset_id":"43d61dcd-e413-450d-80b8-101d5e903357","counter_user_id":"a465ffdb-4441-4cb9-8b45-00cf79dfbc46","memo":"hello","pin":"F39IsJmUaZW03VMV/01lHyY2RCoZ7/X764akX+EmthIc4uVsWAWQTM/IxX5Z9C1y","trace_id":"7c67e8e8-b142-488b-80a3-61d4d29c90bf"}'
      这里我们注意到,其实GET, POST都可以向服务器发送数据,只是GET方式是将数据直接拼接到了URL后面;POST则是以--data参数的形式来发送数据。两种方式都可以讲参数发送给服务器,但参数所在的位置不同。当执行http命令时,应用程序会按照http协议规定的数据格式将客户端的请求命令格式化,并发送出去。被格式化后的请求消息消息包括消息头和消息体。以GET方法发送的数据是放在消息头里面的,且对外部是可见的,即在网络中可以被他人读取;以POST方法发送的数据放在消息体里面,在网络中不可见, 即不容易被窃取。还有就是消息头有固定大小,通常只有几百个字节,因此GET方法能发送的数据量是有限的,POST则没有数据量大小的限制。

WebSocket (Secure) 协议

WebSocket是基于HTTP发展而来的网络协议。它和HTTP协议最大的不同是,HTTP协议是以客户端请求,服务器响应的方式来进行交互,这种交互方式的缺点是服务器无法主动向客户端推送新数据。而通过WebSocket 协议,服务器和客户端均可以主动向对方发送数据。
URL以ws(s)开头,则表示以 WebSocket 协议的形式进行数据交换。
WebSocket是有状态的,即客户端与服务器之间建立连接之后,彼此都保存了对方的状态,因此每次发送数据时不需要发送上下文信息。

  • WebSocket API
    WebSocket提供了一组API来方便WebSocket协议的使用。
    WebSocket API是事件驱动的,服务器和客户端之间通过触发事件和响应事件的方式来沟通。
    下面对webSocket主要的事件,方法,属性进行介绍:

    • WebSocket 事件
      WebSocket有四种事件:Open, Message, Error, Close.
      四个事件对应的句柄分别为onOpen, onMessage, onError, onClose.
      程序可以给每个句柄赋值回调函数
      当事件发生时,对应的回调函数就会被执行。
      如当连接建立成功时,onOpen回调函数就会被执行
      当有消息到达时,onMessage回调函数就会被执行;
      当有异常发生时,onError回调函数就会被执行;
      当连接断开时,onClose回调函数就会被执行。
    • webSocket 方法
      WebSocket有两个方法:
      • send() 发送消息.
        连接建立以后,可以通过send方法来发送数据
      • close() 关闭连接。
        数据发送完之后,可以通过调用close来关闭连接。
    • WebSocket 属性
      WebSocket 有三个常用属性:
    • readyState webSocket连接当前的状态:
      • WebSocket.CONNECTING(0) 表示正在连接
      • WebSocket.OPEN(1) 表示连接已建立
      • WebSocket.CLOSING(2) 表示连接正在关闭
      • WebSocket.CLOSED(3) 表示连接已关闭
  • bufferedAmount 缓存区数据大小
    当调用send()发送数据时,数据其实不是马上通过网络发送出去,而是缓存在应用系统的buffer中,当buffer满的时候一起发送出去,从而提高网络利用率。我们可以通过属性buffererAmout的值来查看buffer中已存在数据的大小。

  • protocol 协议。
    WebSocket支持多种数据传输协议,也支持用户自己建立的协议。在建立连接时可以指定使用哪种协议来传输数据。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容

  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,390评论 1 92
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • 337期推荐3D 毒胆4 双胆49 四码0349 五码03459 六码034569 组选推荐 034 045 04...
    四季豆_bdc1阅读 165评论 0 0
  • 回首青春我发现一路走来失去了好多宝贵的东西,但是我并不难过,因为我知道,以后可能会失去的更多 图片发自简书App
    LYX落阅读 151评论 0 1
  • 今天真冷,零下4至零下17度,今天第一次感受到北风扫脸,寒风刺骨的冬天的寒意。 今天看了李晨和冰冰主演的《空天猎》...
    心境如花阅读 82评论 0 0