• urllib.quote(string[, safe]):对字符串进行编码。参数safe指定了不需要编码的字符;
  • urllib.unquote(string) :对字符串进行解码;
  • urllib.quote_plus(string[, safe]) :与urllib.quote类似,但这个方法用+来替换 ,而quote用%20来代替
  • urllib.unquote_plus(string) :对字符串进行解码;
  • urllib.urlencode(query[, doseq]):将dict或者包含两个元素的元组列表转换成url参数。例如 字典{name: dark-bull, age: 200}将被转换为"name=dark-bull&age=200"
  • urllib.pathname2url(path):将本地路径转换成url路径;
  • urllib.url2pathname(path):将url路径转换成本地路径;

在 http 段中增加如下开关可以关闭 nginx 在 302 转发中附加端口号,而导致网页无法打开的问题。
port_in_redirect off;

在python2.x中对非unicode字符串进行转码都需要先转换成uincode编码再转换到目标编码。这其中因为python并不知道源字符串是啥编码格式,所以就会以 sys.setdefaultencoding 中所设置的编码格式进行解码,如果源字符串的编码格式并不是所设置的格式就会报错。

/proc/loadavg 中记载了系统的负载情况,内容格式是

1.41 1.61 1.79 6/149 2331

内容是 5分钟 10分钟 15分钟 内的平均负载
第四个值是 活动进程数/进程总数
最后一个是最近运行进程的进程ID号

至于 mosquitto 是啥就不多说了。如果是简单的权限验证使用配置文档基本上是可以完全胜任了,但是要对数据库中的帐号进行权限认证,那就得使用插件来实现了。

mosquitto 的ACL插件是以 so (windows dll) 的形式提供的,在 mosquitto 的安装包中就已经包含了编写插件所需的头文件。

  • mosquitto.h
  • mosquitto_plugin.h

我们要做的就是实现 mosquitto_plugin.h 头文件中所声明的所有函数。

  • mosquitto_auth_plugin_version
  • mosquitto_auth_plugin_init
  • mosquitto_auth_plugin_cleanup
  • mosquitto_auth_security_init
  • mosquitto_auth_security_cleanup
  • mosquitto_auth_acl_check
  • mosquitto_auth_unpwd_check
  • mosquitto_auth_psk_key_get

详细的用法和参数说可以参考 mosquitto_plugin.h 中的注释。

mosquitto_auth_acl_check 这个函数是用来检测客户端是否有权限来 publishsubscriptions

  • MOSQ_ERR_SUCCESS
  • MOSQ_ERR_ACL_DENIED
  • MOSQ_ERR_UNKNOWN

可以返回这三类值,来决定客户端的权限。

mosquitto_auth_unpwd_check 用户名密码的认证函数,只有通过这个函数检测的客户端才可以正常登录。

  • MOSQ_ERR_SUCCESS
  • MOSQ_ERR_AUTH
  • MOSQ_ERR_UNKNOWN

库的编译参数:

gcc -I<path to mosquitto_plugin.h> -fPIC -shared plugin.c -o plugin.so

修改 mosquitto.conf 文件,去掉 auth_plugin 前的注释,并在后面写上插件所在的 path 重启 mosquitto 后就会自动加载插件了。