把Tigase迁移到DAF是我们的目标。DAF(Datou Application Framework)是手机大头的服务器集群应用开发框架,它使用Zeroc ICE作为服务器节点和节点之间的通讯中间件,使用Google Protocol Buffers作为通讯内容格式。
在开始的前几天,思路是模糊的,因为对tigase还有太多不了解,所以日记中的一些结论是基于猜测和经验产生的,很可能在继续深入的时候被推翻。所以各位看官发现有重大问题时不必惊慌,以后我会自己发现的。
可以想像,迁移工作分为以下几个重要部分:
从上述已想到的工作大项上看,最具挑战性的工作是第一项,工作量无法预估,工作时间更无法预估。
为了顺利得启动第一项工作,首先要了解XMPP协议内容(英文原版和中文翻译版),在阅读中文版的时候发现了一个严重的错误,所以之后开始中英文参照阅读。之后为了实际考察Tigase和XMPP客户端之间的通讯,我使用Pidgin作为XMPP客户端,连接Tigase服务器进行了登录测试。
添加打印通讯日志代码的最佳位置
打印日志的最佳位置在tigase.net.IOService,IOService中有两个重要方法:
protected void writeData(final String data) { // 这个方法里面的代码需要极小调整: // 修改前: if (data.length() < 256) { log.log(Level.FINEST, "Socket: {0}, Writing data ({1}): {2}", new Object[]{socketIO, data.length(), data}); } else { log.log(Level.FINEST, "Socket: {0}, Writing data: {1}", new Object[]{socketIO, data.length()}); } // 修改后: log.log(Level.FINEST, "Socket: {0}, Writing data ({1}): {2}", new Object[]{socketIO, data.length(), data}); } protected char[] readData() throws IOException { // 这个方法里面的代码需要极小调整,: if (log.isLoggable(Level.FINEST)) { // 修改前: log.log(Level.FINEST, "Socket: " + socketIO + ", Decoded character data: " + cb.array().length); // 修改后 log.log(Level.FINEST, "Socket: " + socketIO + ", Decoded character data: " + cb.toString()); } }
修改完代码之后,再编辑Tigase_Home/etc/init.properties文件:
1、C to S
<?xml version='1.0' ?> <stream:stream to='chutianxing-laptop' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>
<?xml version='1.0'?> <stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' from='chutianxing-laptop' id='2a64d8bf-b69e-4267-8792-e1e20d6b6ce5' version='1.0' xml:lang='en'>
<stream:features> <ver xmlns="urn:xmpp:features:rosterver"/> <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> <mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism> <mechanism>CRAM-MD5</mechanism><mechanism>ANONYMOUS</mechanism> </mechanisms> <register xmlns="http://jabber.org/features/iq-register"/> <auth xmlns="http://jabber.org/features/iq-auth"/> </stream:features>
4、C to S
<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
<stream:stream to='chutianxing-laptop' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>