三不朽

关于同步和异步在架构实践中的总结(微服务架构一)

Publish: November 25, 2016 Category: 编程 No Comments

软件架构的一个原则就是高内聚低耦合,同样微服务也是这样。将各个模块单独划分,模块内实现“高度自制”,那么就带来一个问题,如何实现个微服务模块之间高效的通信呢?有两种基本方向即:同步方式和异步方式。直白一点来讲,同步通信就是发起一个远程服务调用后,调用方会阻塞自己等待整个操作的完成;异步通信调用方不需要等待操作的完成就可以返回,甚至不需要关心这个操作的完成与否。

阅读剩余部分...

ibeacon协议简单分析

Publish: November 7, 2016 Category: 小玩具 No Comments

什么是Bluetooth LE,简写BLE

Bluetooth Low Energy(BLE)是2010年发布的蓝牙4.0技术规范的一部分。它起源于2006年Nokia的Wibree技术,但最终被整合进了蓝牙。这是一组与传统蓝牙不同的协议,并且使用的设备上也不会向后兼容。因此,现在市面上你可以看到三种类型的设备:

  1. Bluetooth设备:只支持传统蓝牙的设备。
  2. Bluetooth Smart Ready设备:同时支持传统蓝牙和LE模式的设备。
  3. Bluetooth Smart设备:只支持LE模式的设备。

最新的手机(iPhone 4s+, SG3+)、笔记本、平板电脑等,基本上都已经支持蓝牙4.0,也就是Bluetooth Smart Ready设备。Beacon,从另一方面来说,这种设备只支持low energy protocols(LE低功耗协议),属于上面说所的“Bluetooth Smart”设备,这也是它们靠一颗纽扣电池就能运行很长时间的原因。老式设备,比如外设、汽车系统、旧手机等通常只支持传统蓝牙协议。

BLE最重要的特点当然在于它的低能耗。举个例子,一些beacon设备靠一颗微型电池就能够持续发送一个信号两年左右(这种电池一般是不可拆卸的,你可能需要在beacon停止工作之后替换一个新的beacon)。传统蓝牙和LE蓝牙使用的都是相同的波段(2.4GHz-2.4835GHz)。BLE协议的传输速率比较低,因此除了用于发现设备和做一些简单通信之外,不太适合用于传输大量的数据流。在协议条款上,LE和传统蓝牙的信号都能够覆盖到100米的范围。

阅读剩余部分...

MQTT协议分析

Publish: November 3, 2016 Category: 小玩具,编程 2 Comments

<div class=WordSection1 style='layout-grid:15.6pt'>

<p class=MsoNormal>比较全面的<span
lang=EN-US>MQTT</span>协议分析文档</p>

<p class=MsoNormal>目录</p>

<p class=MsoNormal><span lang=EN-US> </span></p>

<p class=MsoNormal><span style='font-size:14.0pt;
font-family:宋体;color:red'>使用研究</span></p>

<p class=MsoNormal><span style='font-size:14.0pt;
font-family:宋体;color:red'>协议分析</span></p>

<p class=MsoNormal><span style='font-size:14.0pt;
font-family:宋体;color:red'>连接和心跳</span></p>

<p class=MsoNormal><span style='font-size:14.0pt;
font-family:宋体;color:red'>发布流程</span></p>

<p class=MsoNormal><span style='font-size:14.0pt;
font-family:宋体;color:red'>消息流</span></p>

<p class=MsoNormal><span style='font-size:14.0pt;
font-family:宋体;color:red'>订阅流程</span></p>

<p class=MsoNormal><span lang=EN-US> </span></p>

<p class=MsoNormal><span style='font-size:14.0pt;
font-family:宋体;color:red'>使用研究</span>:</p>

<p class=MsoNormal>服务端:<span lang=EN-US><a
href="http://mosquitto.org/download/"><span style='color:blue'>http://mosquitto.org/download/<;/span></span></p>

<p class=MsoNormal>编译安装:<span lang=EN-US><a
href="http://blog.csdn.net/xukai871105/article/details/39252653"><span
style='color:blue'>http://blog.csdn.net/xukai871105/article/details/39252653<;/span></span></p>

<p class=MsoNormal><span lang=EN-US> </span></p>

<p class=MsoNormal>配置说明</p>

<p class=MsoNormal><span lang=EN-US><a
href="http://cswei.blog.51cto.com/3443978/1225617"><span style='color:blue'>http://cswei.blog.51cto.com/3443978/1225617<;/span></span></p>

<p class=MsoNormal><span lang=EN-US> </span></p>

<p class=MsoNormal><span lang=EN-US>PHP</span>实现</p>

<p class=MsoNormal><span lang=EN-US><a
href="https://github.com/mgdm/Mosquitto-PHP"><span style='color:blue'>https://github.com/mgdm/Mosquitto-PHP<;/span></span></p>

<p class=MsoNormal><span lang=EN-US> </span></p>

<p class=MsoNormal><span lang=EN-US>LUA</span>实现</p>

<p class=MsoNormal><span lang=EN-US><a
href="https://github.com/flukso/lua-mosquitto"><span style='color:blue'>https://github.com/flukso/lua-mosquitto<;/span></span></p>















阅读剩余部分...

HTTP中几个压缩算法的PHP实现分析

Publish: September 14, 2016 Category: WEB,编程,代码分享 No Comments

HTTP 协议中的 Accept-Encoding/Content-Encoding 机制。它可以很好地用于文本类响应正文的压缩,减少网络数据传输,所以一直被广泛使用。但 HTTP 请求的发起方浏览器,无法事先知晓要访问的服务端是否支持解压,所以现阶段的浏览器没有压缩请求正文。
有一些通讯协议基于 HTTP 做了扩展,他们的客户端和服务端是专用的,完全可以针对请求正文进行压缩,例如 WebDAV 客户端就是这么做的。

HTTP中各压缩算法

实际的 Web 项目中,会存在请求正文非常大的场景,例如发表长篇博客,上报用于调试的网络数据等等。这些数据如果能在本地压缩后再提交,就可以节省大量流量、减少传输时间。本文介绍如何对 HTTP 请求正文进行压缩,包含如何在服务端解压、如何在客户端压缩两个部分。

开始之前,先来介绍本文涉及的三种数据压缩格式:

  • DEFLATE,是一种使用 Lempel-Ziv 压缩算法(LZ77)和哈夫曼编码的压缩格式。详见 RFC 1951;
  • ZLIB,是一种使用 DEFLATE 的压缩格式,对应 HTTP 中的 Content-Encoding: deflate。详见 RFC 1950;
  • GZIP,也是一种使用 DEFLATE 的压缩格式,对应 HTTP 中的 Content-Encoding: gzip。详见 RFC 1952;
    Content-Encoding 中的 deflate,实际上是 ZLIB。为了清晰,本文将 DEFLATE 称之为 RAW DEFLATE,ZLIB 和 GZIP 都是 RAW DEFLATE 的不同 Wrapper。


阅读剩余部分...

WorkerMan读代码--架构分析

Publish: August 3, 2016 Category: 编程 No Comments

Workerman是一款纯PHP开发的开源高性能的PHP socket 服务器框架。被广泛的用于手机app、手游服务端、网络游戏服务器、聊天室服务器、硬件通讯服务器、智能家居、车联网、物联网等领域的开发。 支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。基于workerman开发者可以更专注于业务逻辑开发,不必再为PHP Socket底层开发而烦恼。

3.3版本中已经将gateway概念取消掉了,精简了架构模式。
Worker是WorkerMan中最基本的功能单元,Worker可以开启多个进程监听端口并使用特定协议通讯。每个Worker进程独立运作,每个Worker进程都能上万的客户端连接,并处理这些连接上发来的数据。主进程只负责监控子进程,不负责接收数据。


阅读剩余部分...