【未完待续】将 nginx 注册为系统服务

在服务器上,我们可以通过对 nginx 指定不同的 prefix 来同时维护多个 nginx master 进程。但由于 prefix 的路径一般都比较长, reload 或者 reopen nginx master 进程就会比较不方便。

可以采用我在 在 OS X 中使用 OpenResty – 3.快捷方式 中提到的自建快捷方式的形式来简化这些操作。

但是,更一般的,在服务器上我们会采用操作系统提供的标准服务的方式来进行这些简化。

本文将介绍在多个操作系统上将 nginx 注册为服务的方式。

1. Mac OS X

参照 在 OS X 中使用 OpenResty – 2. 配置 OpenResty 环境 进行配置即可。

2. CentOS

根据 CentOS Nginx的一个初始化脚本(用于启动、停止、查看状态) 一文提供的方法,我整理了代码到 gist 上,只需要将 nginxd 下载到 /etc/init.d 并执行 addnginxservice 脚本即可。

下面的代码自动帮你做了上面的事:

wget --no-check-certificate https://gist.githubusercontent.com/zrong/9c7dfce8f274ee451188/raw/77eada5f92dd5583838390f26cc9790b00e63137/nginxd
wget --no-check-certificate https://gist.githubusercontent.com/zrong/9c7dfce8f274ee451188/raw/a0084d1ae6d5175c913e4593c99d493487d14c75/addnginxservice && source addnginxservice

3. Ubuntu

待续

4. Windows

待续

在 OS X 中使用 OpenResty

我曾经写过 在 Mac OS X 上安装lighttpd ,从那时起,我的 Mac 上的 HTTP 服务器一直是 lighttpd。

现在,为了学习 OpenResty ,我将 lighttpd 进行了替换。下面记录这个过程。

1. 移除 lighttpd

在 Mac OS X 上安装lighttpd 的时候,我使用 launchctl 来实现 lighttpd 的自动启动。现在,只需要 unload 即可。

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.lighttpd.plist

这会立即停止 lighttpd 的运行。接下来,将 homebrew.mxcl.lighttpd.plist 从~/Library/LanuchAgents 目录中移除。否则下次启动系统的时候,lighttpd 又会启动。

继续阅读

cx_Freeze 打包 Python3.4+PyQt5.3

基于 Python 打包成 exe 的工具,主要有这样几个:

但遗憾的是,目前只有 cx-Freeze 明确表示支持 Python3 。pyinstaller 则有一个试验性分支在进行这方面的测试。

我有一个项目 data_tester 使用 Python3.4+PyQt5.3 开发,需要使用 cx-Freeze 将其打包成 exe 格式,提供给其它同事在 Windows 7(64bit) 系统中使用。

具体打包的方法,查看 cx-Freeze 官方文档 即可知晓,这篇文章中仅仅记述我踩过的几个坑。 继续阅读

在 Python 虚拟环境中使用 PyQt5

我曾经在 Python 虚拟环境 一文中介绍过 Python 的几种虚拟环境。 我使用的是 Python 3.4 ,自带虚拟环境 venv ,因此就没有安装 virtualenv

今天在虚拟环境中使用 PyQt5 的时候,出现了问题。Python 告诉我说找不到 PyQt5 这个模块,但其实我的 PyQt5 已经安装在主环境中了。

要解决这个问题,只需要把主环境中的 PyQt5 模块复制到虚拟环境中即可。

下面举例说明。 继续阅读

Socket 与 WebSocket

去年光棍节的时候,我写过一篇 quick-cocos2d-x 中的 socket 技术选择:LuaSocket 和 WebSocket 。这篇文章介绍了我为何决定在项目中使用 LuaSocket 。

现在想起来,当时对 WebSocket 是很感兴趣的,但由于服务端的限制,最终依然选择了 LuaSocket。我后来对 LuaSocket 进行了封装,使其更好用。

现在,面对一个全新的项目,我自然而然地选择了 WebSocket。

因此,我需要了解下面这些问题:

  1. Socket 和 WebSocket 有哪些区别和联系?
  2. WebSocket 和 HTML5 是什么关系?
  3. 必须在浏览器中才能使用 WebSocket 吗?
  4. WebSocket 能和 Socket 一样传输 raw 数据么?
  5. WebSocket 和 Socket 相比会多耗费流量么?

但是,目前网上全面介绍这两种协议的中文文章并不多,或者说不够全面。我无法找到一篇文章能解决上面的所有问题。因此,我写了本文,把找到的 Socket 和 WebSocket 的相关资料做一个梳理,以方便理解。

本文并不能直接完整回答上面提出的几个问题,但读完本文,要理解上面的那些问题,是很容易的事。

由于能力有限,本文不可能很长。而且,技术细节并非所有人都愿意仔细了解。本文包含了大量的外部链接,跟随这些链接,可以找到足够多的细节,满足你/我的求知欲。


1. 概述

选择了 WebSocket 技术之后,不可避免的,我要将它和其他协议以及技术做一下比较。最常见的,就是需要比较 WebSocket 与 HTTP、Socket 技术的异同。

WebSocket 是为了满足基于 Web 的日益增长的实时通信需求而产生的。在传统的 Web 中,要实现实时通信,通用的方式是采用 HTTP 协议不断发送请求。但这种方式即浪费带宽(HTTP HEAD 是比较大的),又消耗服务器 CPU 占用(没有信息也要接受请求)。(下图来自 WebSocket.org

Latency comparison between the polling and WebSocket applications

而是用 WebSocket 技术,则会大幅降低上面提到的消耗:(下图来自 websocket.org

Comparison of the unnecessary network throughput overhead between the polling and the WebSocket applications

关于更详细的描述,尹立的这篇文章讲得非常好:WebSocket(2)–为什么引入WebSocket协议

那么,WebSocket 到底与 HTTP 协议到底是一个什么样的关系呢?它和 Socket 又有什么联系?这就要讲到 OSI 模型和 TCP/IP 协议族。 继续阅读

【未完待续】开始使用Docker

今天花了2个小时看了下 Docker 。感觉真是太好用了。

docker 的文档组织得非常好,想要了解的内容基本上在官方文档中都有讲到。我把这些内容用中文做一下简单梳理,方便大家在1个小时内快速了解 docker。

1. 安装

1.1 Mac OS X

下面的内容主要来自于: Installing Docker on Mac OS X

在 OS X 上,docker 提供了一个 PKG 安装包,下载安装即可。如果觉得 github 下载太慢,可以把链接粘贴到 迅雷 或者 旋风 中下载。当然如果有 VIP 就更快了。

安装完毕后,在 terminal 中执行: 继续阅读

怎么理解Vim以及怎么学

这是我对知乎上一个问题的回答,原题是:Vim 约等于记事本吗?

最近看了linux的C编程书和vim用法
感觉vim和记事本似乎没多大区别
相对IDE缺少:代码自动补全,debug时查看所有变量值 等功能
平常编写一个自己的电脑可以运行的程序,加了适当插件的vim和VS应该差不多吧?

下面是我的回答。


题主真的看完了 Vim 手册么?

====== 很2的分割线 ======

Vim 并不适合所有人用。如果你已经习惯了 VS 或者其它 IDE,并且觉得它们就是神级工具,那么不必尝试 Vim。

Vim 是给 Vimer 用的,是给熟悉或者认同 Unix哲学 的人用的。

不要被网上那些 编辑器之神神之编辑器 之争的文章刺激得热血沸腾就跑来学习 Vim。如果你工作在 Windows 上,很少接触类 Unix 操作系统,不了解 Unix哲学,或者对 Unix哲学 之说感到不屑,那么趁早放弃。

Vim 并不适合所有场合,很多时候,你还是依然需要 Xcode、Eclipse、IntelliJ IDEA 和 VS,没必要让 Vim 做所有的事情。

虽然我知道 VS 也能当记事本,但我从来不敢这么用。

你现在只能把 Vim 当记事本来用,但不代表 Vim 就是记事本。是的,约等于也不是。

====== 分割线之2 ======

(如有雷同,实属巧合)

选择和放弃: 继续阅读

页游效果能否媲美端游

这篇文章是我在知乎上的一个回答:网页游戏是如何做到媲美客户端的网络游戏效果的?


我不认为现在的页游的3D 效果能 “媲美” 端游,充其量只算是 “接近” 罢了。

网页游戏运行在浏览器框架下。浏览器是操作系统中的一个应用程序。

实际上,网页游戏作为一个应用,必须运行在浏览器的一个插件(或者一个引擎)之中。

可能用于开发 3D 页游的几个技术是: 继续阅读

cocos2d-x v2 和 v3 对照手册

本文大部分内容来自对这篇文章的翻译:cocos2d-x v2 to v3 mapping guide

但这篇文章有一些老了,还有一些内容已经在 cocos2d-x 3.3 中过时。因此,我并没有进行完全对照翻译。对原文中的错误,我也进行了一些修改。

同时,我也会不断增加自己的内容。


我的新项目开始使用 cocos2d-x v3 。cocos2d-x v3 和 v2 相比有非常大的改变。我把踩过的坑列在下面,以方便后来之人。 继续阅读

可能是一个程序员