最终我还是给blogo2增加了一个不实用的通过邮件编辑日志的功能,需要加一个#edit:BLOGID的标记,但是因为邮件客户端跟本不知道已发blog的id,所以功能略显鸡肋。这绝对是我专用的功能,在bin目录又加了一个小命令,只需在vim里输入:r!wpblog bluehua.org 便可以把最新的blog拽回来,包括blogid
wpblog的内容
#!/usr/bin/env python
import sys
import xmlrpclib
import getpass
import os
'''
A simple tool for dump blog powered by wordpress
For example: in vim, dump the last webblog into current buffer
:r!wpblog myblog.domain
'''
#make sure the stderr is the control terminal
if os.name == 'posix':
sys.stderr = open('/dev/tty', 'a')
if len(sys.argv) < 2:
print >> sys.stderr,'''
Usage:
wpblog myblog.domain [blogid]
'''
exit(1)
rpc = 'http://%s/xmlrpc.php' % sys.argv[1]
print >> sys.stderr, '\r\nUsername:'
user = raw_input()
passwd = getpass.getpass('Password:')
api = xmlrpclib.ServerProxy(rpc)
try:
if len(sys.argv) > 2:
blog = api.metaWeblog.getPost(sys.argv[2], user, passwd)
else:
blogs = api.metaWeblog.getRecentPosts('', user, passwd, 1)
if not len(blogs):
print >> sys.stderr, 'no blog returned~'
exit(1)
blog = blogs[0]
except xmlrpclib.Fault, ex:
print >> sys.stderr, ex.faultString.encode('utf-8')
exit(1)
print '#cats:%s' % u','.join(blog['categories']).encode('utf-8')
print '#tags:%s' % blog['mt_keywords'].encode('utf-8')
print '#edit:%s' % str(blog['postid'])
print blog['description'].encode('utf-8') Copy Code
———–
post by gmail~
jabberd2的mio和sx目录是灰常重要的两个目录,关系底层逻辑:
mio封装了一套多路io的实现,支持kqueue,epoll,poll,select,可以在configure的时候通过–enable-mio=指定。
sx目录的代码则在mio的上层实现了一条支持插件的逻辑通道,一些非核心xmpp协议都可以通过插件的形式加入,例如sx/compress.c可以实现流的压缩。
代码包装层次比较深,看起来比较绕,所以以c2s目录里的main.c为入口,画了一张c2s与router的第一次写读的流程,当然这里没有错误处理部分。基本上展现了jabberd2的io逻辑。
+--------------------------------------------------------------+
| main.c |
| 初始化mio和sx |
| 调用sx_client_init |
| 调用注册client初始化的插件 |
| 构造stream头 |
| 调用注册stream头处理的插件 |
| 将头追加到写缓存 |
+-+ 触发event_WANT_WRITE:_sx_event(s, event_WANT_WRITE, NULL); |
| | |
| | main loop(mio_run()) |
| | while true: |
+--|-+>if FD(m,fd)->type == type_NORMAL && MIO_CAN_READ(m,iter) |
| | | 触发:action_READ |
| | | 回调:c2s_router_mio_callback |
| | | 调用:sx_can_read |
| | | 触发:event_READ -------------------------+
| | | if 读入.length > 0 | |
| | | 调用注册io读的插件:_sx_chain_io_read(s, out); | |
| | | 调用:_sx_process_read(s, out); | |
| | | xml->nad | |
| | | 调用注册xml处理的插件 | |
| | | 触发:event_PACKET -| | |
| | +--------------------+-----------------------------------------+ |
| | | |
| | | |
| | | |
| | v |
| | +-----------------------------------------+ |
| | | event_PACKET | |
| | +-----------------------------------------+ |
| | | 回调:c2s_router_sx_callback | |
| | | 接收到的xml在这里已经被解成nad结构体 | |
| | | 正式逻辑开始 | |
| | +-----------------------------------------+ |
| | |
| | |
| | |
| | +--------------------------------+ +------------------------------+ |
| |> event_WANT_WRITE | +---> | event_WRITE | |
| +--------------------------------+ | +------------------------------+ |
| | 回调:c2s_router_sx_callback | | | 回调:c2s_router_sx_callbac | |
| | 调用:_mio_write | | | 调用:send()将数据送出 | |
| | 触发:action_WRITE | | +------------------------------+ |
| | 回调:c2s_router_mio_callback | | |
| | 调用:sx_can_write | | |
| | if 写缓存.length > 0 | | |
| | 触发:event_WRITE -----+ |
| | endif | |
| | 触发:event_WANT_READ -------+ |
| | | | |
| +--------------------------------+ | |
| | |
| +----------------------------------+ | +-------------------------------+ |
| | event_WANT_READ <+-+ | event_READ <+-------+
| +----------------------------------+ +-------------------------------+
| | 回调:c2s_router_sx_callback | | 回调:c2s_router_sx_callback |
| | 调用:_mio_read | | 调用:recv()将数据读入 |
+----+-调用:MIO_SET_READ(m, FD(m,fd)); | | |
| | | |
+----------------------------------+ +-------------------------------+
-----------
post by gmail~
11.29日更正配置文件编辑部份
————————————-
之前已经yum安装过gcc和mysql
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum install expat expat-devel libidn libidn-devel udns udns-devel libgsasl libgsasl-devel openssl openssl-devel mysql-devel
cd ~
mkdir src
mkdir /opt/jabberd
cd src
wget http://codex.xiaoka.com/pub/jabberd2/releases/jabberd-2.2.11.tar.bz2
tar jxvf jabb*
cd jabb*
#初始化mysql
mysql -uroot -pxxxxx < tools/db-setup.mysql
./configure --prefix=/opt/jabberd --enable-mio=epoll --enable-mysql --enable-debug --enable-mio-debug
#因为我是开发之用所以加了调试选项--enable-debug --enable-mio-debug
make
make install
#为启动服务添加一个用户
useradd -d /dev/null jabber
cd /opt/jabberd
chown jabber:jabber -R ./
#然后按照文档改配置文件,下面直接写成sed表达式,方便以后自动化完成:http://www.jabberdoc.org/AdminGuide
#<id register-enable='true'>example.com</id>
sed -i "s/\(<id reg[^>]*>\)[^<]*/\1example.com/" etc/c2s.xml
#<id>example.com</id>
sed -i "s/\(<id>\)[^<]*/\1example.com/" etc/sm.xml
#存储方式改成mysql
sed -i "s/<module>sqlite<\/module>/<module>mysql<\/module>/" etc/c2s.xml etc/sm.xml
#设置用户名和密码
sed -i "30,\$s/<user>.*<\/user>/<user>DBUSER<\/user>/" etc/c2s.xml etc/sm.xml
sed -i "30,\$s/<pass>.*<\/pass>/<pass>DBPASS<\/pass>/" etc/c2s.xml etc/sm.xml
Copy Code
安装和配置到此结束,启动一下~
sudo -u jabber bin/jabberd
输出调试信息
sudo -u jabber bin/jabberd -D
———–
post by gmail~
ft,发出来就变形了,加个pre~
+---------------+
| Router |
+---------------+
| logic |
| callback |
| SX (plugins) |
| callback |
| MIO (listen) |
+---------------+
—————–
以前还以为文档里的字符表是手工加的,才发现vim有插件的
http://www.vim.org/scripts/script.php?script_id=40
试用了一下,很顺手~
+—————+
| Router |
+—————+
| logic |
| callback |
| SX (plugins) |
| callback |
| MIO (listen) |
+—————+
———–
post by gmail~