推送

WebSocket协议 8 问

WebSocket协议 8 问

WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端开发的各种场景中。

对http一问一答中二式流程的不满,催生了支持双向通信的WebSocket诞生。WebSocket是个不太干净协议。

一、WebSocket协议只能浏览器发起么?

不是。目前此协议的受众的也不仅仅是web开发者。

WebSocket只是一种协议,它和http协议一样,使用类似okhttp的组件,可以在任何地方进行调用,甚至可以借助WebSocket实现RPC框架。

二、WebSocket和HTTP什么关系?

WebSocket和http一样,都是处于OSI模型中的最高层:应用层

WebSocket借助http协议进行握手,握手成功后,就会变身为TCP通道,从此与http不再相见。使用netstat或者ss,能够看到对应的连接,它与处于抽象层的socket,在外观上没有区别。

三、WebSocket和长轮询有什么区别?

长轮询,就是客户端发送一个请求,服务端将一直在这个连接上等待(当然有一个超长的超时时间),直到有数据才返回,它依然是一个一问一答的模式。比如著名的comted。

WebSocket在握手成功后,就是全双工的TCP通道,数据可以主动从服务端发送到客户端,处于链接两端的应用没有任何区别。

WebSocket创建的连接和Http的长连接是不一样的。由于Http长连接底层依然是Http协议,所以它还是一问一答,只是Hold住了一条命长点的连接而已。

长轮询和Http长连接是阻塞的I/O,但WebSocket可以是非阻塞的(具体是多路复用)。

四、如何创建一个连接?

WebSocket的连接创建是借助Http协议进行的。这样设计主要是考虑兼容性,在浏览器中就可以很方便的发起请求,看起来比较具有迷惑性。

        

讲讲PWA

一、背景

文章2017 前端大事件和趋势回顾,2018 何去何从?中提到了2017年前端值得关注的十大事件,其中就提到了PWA。

大家都知道Native app体验确实很好,下载到手机上之后入口也方便。它也有一些缺点:

  • 开发成本高(ios和安卓)
  • 软件上线需要审核
  • 版本更新需要将新版本上传到不同的应用商店
  • 想使用一个app就必须去下载才能使用,即使是偶尔需要使用一下下
                    

你好 MQTT 5.0!

文章翻译自 Jens Deters 11/30/17 的 Hello MQTT Version 5.0!

2017年8月9日,OASIS MQTT技术委员会宣布MQTT 5.0版现已公开发布,并将于9月8日前发表评论。并且预计在17年年底发布下一版本的Message Queue Telemetry Transport(MQTT),MQTT v5.0是MQTT 3.1.1的后续版本。

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。

1、为什么不是4.0 ?

根本原因在与协议规范说明中, MQTT CONNECT Control Packet (响应头的)第7个字节处,需要指定协议的级别,因为mqtt 3.1.1时 定义协议级别时使用了 0x04 (占用了4的版本号),所以下一代协议的级别只能是 0x05 (5)。

最重要的是: mqtt v5.0是不向后兼容的,显然有太多的新东西要被引入,所有现有的实现要重新实现。…

        

MQTT v5.0新特性总结(非规范)

最近翻译了MQTT v5.0协议的公开审阅版,已经传到GitHub上了,可以参见:MQTT v5.0 协议草案中文翻译

MQTT v5.0添加了以下特性

  • 会话过期
    把清理会话标志拆分成新开始标志(指示会话应该在不使用现有会话的情况下开始)和会话过期间隔标志(指示连接断开之后会话保留的时间)。会话过期间隔时间可以在断开时修改。把新开始标志设置为1且会话过期间隔标志设置为0,等同于在MQTT v3.1.1中把清理会话(CleanSession)设置为1。
  • 消息过期
    允许消息在发布时设置一个过期间隔。
  • 所有确认报文原因码
    更改所有响应报文以包含原因码,包括CONNACK,PUBACK,PUBREC,PUBREL,PUBCOMP,SUBACK,UNSUBACK,DISCONNECT和AUTH,以使得调用方确定请求的函数是否成功。
  • 所有确认报文原因字符串
    更改大部分报文以包含原因码同时也允许一个可选的原因字符串。这是为问题定位而设计的,并且不应由接收端所解析。
  • 服务端断开
    允许服务端发送DISCONNECT报文,以指示连接被关闭的原因。
  • 载荷格式和内容类型
    允许在消息发布时指定载荷格式(二进制、文本)和MIME样式内容类型。这些信息被转发到消息的接收端。
  • 请求/响应
    规定MQTT请求/响应模式,提供响应主题和对比数据属性,以使得响应消息被路由回请求的发布者。此外,为客户端添加从服务端获取获取关于构造响应主题的配置信息的能力。
  • 共享订阅
    添加对共享订阅的支持,以允许多个订阅消费者进行负载均衡。
  • 订阅标识符
    允许在SUBSCRIBE报文中指定一个数字订阅标识符,并在消息分发时返回此标识符。这使得客户端收到分发的消息时确定此消息是由哪个或哪些订阅导致的。
  • 主题别名
    通过将主题名缩写为小整数来减小MQTT报文的开销大小。客户端和服务端分别指定它们允许的主题别名的数量。
  • 流量控制
    允许客户端和服务端分别指定未完成的可靠消息(QoS>0)的数量。发送端可以暂停发送此类消息以保持消息数量低于配额。这被用于限制可靠消息的速率和某一时刻的传输中(in-flight)消息数量。
  • 用户属性
    为大多数报文添加用户属性。PUBLISH报文的用户属性由客户端应用程序定义。PUBLISH报文和遗嘱报文的用户属性由服务端转发给应用消息的接收端。CONNECT,SUBSCRIBE和UNSUBSCRIBE报文的用户属性由服务端实现定义。CONNACK,PUBACK,PUBREC,PUBREL,PUBCOMP,SUBACK,UNSUBACK和AUTH报文的用户属性由发送端定义,且对发送端具有唯一性。MQTT规范不定义用户属性的意义。
  • 最大报文长度
    允许客户端和服务端各自指定它们支持的最大报文长度。会话参与方发送更大的报文将造成错误。
  • 可选的服务端功能可用性
    提供定义一组服务端不允许的功能,并告知客户端的机制。可以使用这种方式指定的功能包括:最大QoS等级,保留可用,通配符订阅可用,订阅标识符可用和共享订阅可用。客户端使用服务端通知了(不可用)的功能将造成错误。
    在早期版本的MQTT协议中,服务端没有实现的功能通过未授权告知客户端。当客户端使用其中一种(不可用的)功能时,此功能允许服务端告知客户端,并添加特定的原因码。
  • 增强的认证
    提供一种机制来启用包括互相认证在内的质询/响应风格的认证。这允许在客户端和服务端都支持的情况下使用SASL风格的认证,包括客户端在连接中重新认证的功能。
  • 订阅选项
        

HTML 5 服务器推送事件

HTML5 服务器发送事件(server-sent event)允许网页获得来自服务器的更新。

Server-Sent 事件 - 单向消息传递

Server-Sent 事件指的是网页自动获取来自服务器的更新。

以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。

例子:Facebook/Twitter 更新、估价更新、新的博文、赛事结果等。

    

实时系统架构与实践

实时系统架构与实践

概要
分享基于 MQTT 协议的、面向移动互联网的 实时消息、实时统计、实时在线系统的架构设计;团队在云主机、部署自动化、监控自动化实践;团队在高性能分布式 Key/Value 存储的实践。 听众受益: 了解 MQTT 协议在移动互联网、智能设备上使用的优势, 了解大型实时系统的基本架构设计原理, 小团队如何利用云端资源快速实现、运营产品, 自动化 部署、监控 系统及实践方法, 高性能 Key/Value 系统的新设计理念

http://www.infoq.com/cn/presentations/framework-and-implementation-of-real-time-system

            

架构师于小波:魅族实时消息推送架构

【编者按】此文是根据魅族架构师于小波在msup和魅族联合举办的#魅族技术开放日#的演讲中的分享内容整理而成,于小波分享了魅族实时消息推送架构的其中遇到的坑和一些心得体会。

系统介绍

这个系统数据情况是这样的,实时在线的用户是2500万左右,下面有一个趋势图,从今年1到10月份的都列出来了,这个系统一天PV量是50亿左右,这个系统推送速度可以达到600万条/分钟。…