Tigase组件 – Packet过滤

本文翻译自 – http://www.tigase.org/content/packet-filtering-component java

Packet过滤API

Tigase为全部组件都提供了一个packet过滤API。你能够分别过滤传入和传出packet。 服务器

经过学习过滤,咱们能够知道如何对packet进行拦截,如何修改packet内容,如何完全得屏蔽packet。经过屏蔽,咱们可让packet跳事后续的处理过程,也能够完全抛弃它。 网络

packet的过滤基于PacketFilterIfc接口,请参考接口的javadoc来获取所有细节。过滤的主要方法是Packet filter(Packet packet),它以packet做为入口参数并对其进行处理,里面能够填写代码,针对packet的特定内容进行报警(若是后续处理忽视被报警的内容,能够有效的减少系统负载),并最终产生一个传出Packet用来作后续处理。若是传出的packet为null,说明这个包已经被屏蔽,它不须要再进行任何的后续处理;不然它会传出最原始的packet实例(即传入packet)或者是传入packet副本的修改版本svn

须要强调的是:即便Packet对象不是immutable的,咱们也毫不建议对已经存在的Packet实例作任何修改。这是由于Packet实例可能同时被其余的组件或线程进行处理,对Packet实例所作的任何修改,均可能产生不可预估的后果。 学习

请参考PacketCounter的代码,它是用来统计不一样类型packet个数的简单过滤器。在缺省状况下它会被全部组件加载,用来绘制packet的流量图。你能够得到各个类型消息的统计个数,能够得到packet发源地的消息个数,packet途径地的消息个数等等。 spa

这是由于过滤器本身能够产生统计数据,而且Tigase内嵌的统计监控机制能够访问到这些数据。若是要充分利用内嵌的统计监控功能,过滤器须要实现void getStatistics(StatisticsList list)方法。这个方法缺省状态多是空的,但你能够在里面填写代码,产生统计数据并把它们添加到列表当中,请参考PacketCounter代码。 线程

配置

过滤器是可配置的,多个过滤器能够在Tigase服务器中多个组件中分别进行配置,且传入packet和传出packet可依据配置分别进行过滤。这为开发者控制Tigase服务器中的数据流量提供极大的灵活性。好比你能够加载一些特定的packet过滤器,阻止一些特别的消息来源向用户发送消息。你也能够过滤一些会致使消耗大量系统资源的packet来减轻系统负载。 翻译

缺省的配置信息会让每个组件都加载同一个过滤器——PacketCounter,它做用于传入和传出方向。 component

1
2
3
4
5
6
7
8
9
10
11
12
message-router/incoming-filters=tigase.server.filters.PacketCounter
message-router/outgoing-filters=tigase.server.filters.PacketCounter
sess-man/incoming-filters=tigase.server.filters.PacketCounter
sess-man/outgoing-filters=tigase.server.filters.PacketCounter
c2s/incoming-filters=tigase.server.filters.PacketCounter
c2s/outgoing-filters=tigase.server.filters.PacketCounter
s2s/incoming-filters=tigase.server.filters.PacketCounter
s2s/outgoing-filters=tigase.server.filters.PacketCounter
bosh/incoming-filters=tigase.server.filters.PacketCounter
bosh/outgoing-filters=tigase.server.filters.PacketCounter
muc/incoming-filters=tigase.server.filters.PacketCounter
muc/outgoing-filters=tigase.server.filters.PacketCounter

假如你实现了一个本身的过滤器——垃圾信息过滤器(com.company.SpamBlocker)。你但愿关闭全部组件的PacketCounter过滤器,只有message router保持原状态(开启);并在connection manager上安装垃圾信息过滤器。 router

须要注意的是:在connection manager里,传入传出可能并非你所想像的那样,而是偏偏相反。

  • 传入:是message router提交给组件的packet流向,这些packet须要进行后续的处理。对connection manager而言,后续的处理意味着须要把packet发送出网络。
  • 传出:是组件产生的结果packet流向,这些packet从组件发出并被提交给message router,message router决定将这些packet发送到哪里并进行后续的处理。对于connection manager而言,传出方向是从网络当中获取packet。

根据上面的解释,咱们须要把垃圾信息过滤器部署到全部connection manager的传出方向。也许你还有第二个需求,即比较bosh链接和标准的c2s链接各自产生的packet流量,那么咱们能够开启connection manager上的PacketCounter过滤器。下面是咱们开启connection manager的垃圾过滤器,并开启message router和connection manager上的PacketCounter的配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
message-router/incoming-filters=tigase.server.filters.PacketCounter
message-router/outgoing-filters=tigase.server.filters.PacketCounter
sess-man/incoming-filters=
sess-man/outgoing-filters=
c2s/incoming-filters=tigase.server.filters.PacketCounter
c2s/outgoing-filters=tigase.server.filters.PacketCounter,com.company.SpamBlocker
s2s/incoming-filters=
s2s/outgoing-filters=com.company.SpamBlocker
bosh/incoming-filters=tigase.server.filters.PacketCounter
bosh/outgoing-filters=tigase.server.filters.PacketCounter,com.company.SpamBlocker
muc/incoming-filters=
muc/outgoing-filters=

将这些配置项应用于Tigase服务器的最简单方法就是把它们写进init.properties文件。详情能够参考以前的文档TODO:这里是一个连接

相关文章
相关标签/搜索