54 CHEN

Tigase代码框架解读

下面的内容,在解剖tigase过程中所写,使用的版本是:5.2.1 (2014年7月份)。

组件

tigase就是一个大组件框,里面所有东西基本都是组件组成的。session manager、message router、c2s connection manager…全部是组件。

ServerComponent接口是一个最小化接口,但是要去写很多代码,tigase提供了许多的现成的代码,减少去从零实现这个接口的过程。

比如extends AbstractMessageReceiver可以直接生成一个处理消息的组件。只需要实现一个processPacket方法。实现getDefaults方法,可以对系统变量进行处理。实现setProperties方法,可以去设置一些要用的变量。

多线程

processPacket方法,可以把逻辑扔到不同的cpu上去运行,以发挥服务器多核的优势。processingThreads方法返回用多少个cpu来处理。

在重写processingThreads的同时,需要重写hashCodeForPacket方法,确保同一个用户的数据,在同一个cpu上处理,以确保不出现消息乱序。

定时器

可以重写everySecond everyMinute everyHour的逻辑,以达到定时器的作用。

还可以重写另外两个方法来指定固定时间完成的任务:

addTimerTask(TimerTask task, long delay, TimeUnit unit);

addTimerTask(TimerTask task, long delay);

重写initializationComplete方法,tigase会在特定的时间里来调用,具体说,就是在所有准备工作做完了后,多半这里用来启动连接之类的。

统计信息

复写getStatistics,用StatisticsList来保存统计信息。

组件的生命周期

一个组件按照下面的过程被调用:

ConnectionManager

ConnectionManager是继承自AbstractMessageReceiver(前面的可以省去代码的组件实现方式)的抽象类,比如c2s组件就是继承了它。

如果你extend这个类,你需要知道数据来源于哪里:如果来源于MessageRouter,那么abstract void processPacket(Packet packet)方法会被调用; 如果来源于网络连接,那么abstract Queue processSocketData(XMPPIOService serv)方法会被调用。

架子

启动

网络

零碎

原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]

Posted by 54chen tigase,xmpp

« bosh vs comet vs long polling vs polling tigase网络核心SockThread详解 »