飞污熊博客

静下心来做一件事

前面一篇介绍的任务队列是每个消息只能被一个工作者取走。这一篇讲解发布/订阅消息模式, 在这个模式里面,一个消息可以被发送给多个消费者。

这里我通过一个简单的日志系统来说明,消息生产者会将日志发送给队列,然后多个订阅者可以接收到这条日志显示到不同的地方, 比如可以打印到文件中,同时打印到控制台上面。

阅读全文 »

最近又开始捣鼓RabbitMQ了,一个超好用的队列中间件,官网教程更新,自己也将有用的东东记录下来。

测试环境:消息服务器CentOS7.4、客户端Python3.6.1

RabbitMQ是一个出色的消息代理中间件(Message Broker):接受和转发消息。你可以将它看作是一个邮局, 你把自己的信件写上收件人地址,然后放到邮筒里面就不用管了,由邮局负责将这个信件送到目的地。

阅读全文 »

WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信。

它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息, 是真正的双向平等对话,属于服务器推送技术的一种。

其他特点包括:

  1. 建立在 TCP 协议之上,服务器端的实现比较容易。
  2. 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
  3. 数据格式比较轻量,性能开销小,通信高效。
  4. 可以发送文本,也可以发送二进制数据。
  5. 没有同源限制,客户端可以与任意服务器通信。
  6. 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

协议标识符是ws(如果加密,则为wss),服务器网址就是 URL

1
ws://xncoding.com:80/some/path

另外客户端不只是浏览器,只要实现了ws或者wss协议的客户端socket都可以和服务器进行通信。

阅读全文 »

我们经常会遇见许多要运行很长时间的任务,如果还是按照常规的页面请求方式,就会产生卡顿,页面假死现象。 这时候我们第一个想到的就是将这种同步请求方式转换成异步请求,然而对于不需要关心返回结果的请求这个非常简单, 大部分情况是我们还得知道异步任务返回结果,然后调用回调函数来更新页面结果。

目前常见的三种方式是Ajax轮训、Ajax长连接(long polling)、WebSocket方式。 这里我只讲Ajax的两种方式,因为更好的WebSocket方式我已经单独写了一篇文章来介绍。

阅读全文 »

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表), 而无需将用户名和密码提供给第三方应用。

OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。 每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。 这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。

目前最新版本是OAuth 2.0,这里我通过用户使用 github 登录在我的博客网站上留言为例,简述 OAuth 2.0 的运作流程。

阅读全文 »

这一篇记录一下Jenkins的一些有趣的东西,或者说更加接近于实战的东西,也许我写的这几篇内容只覆盖了20%左右的内容, 但是应该能解决实际工作中80%左右的问题。这就是常说的2/8准则,时间有限,我也只会去记录这些常用的东西。

阅读全文 »

这一篇我通过两个实际的真实例子来演示Jenkins常见使用案例。 第一个例子演示一个标准的SpringMVC这个Java Web工程怎样自动抓取最新源码、测试、打包和部署, 第二个例子演示目前我做的Winstore这个Python项目怎样实现自定义构建指令、在线升级、自动打包和自动部署。

阅读全文 »

前面一篇介绍了Jenkins的入门安装和简单演示,这篇讲解最核心的Pipeline部分。

Jenkins Pipeline 就是一系列的插件集合,可通过组合它们来实现持续集成和交付的功能。 通过Pipeline DSL为我们提供了一个可扩展的工具集,将简单到复杂的逻辑通过代码实现。

通常,我们可以通过编写Jenkinsfile将管道代码化,并且纳入到版本管理系统中。

阅读全文 »