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:這裏是一個連接

相關文章
相關標籤/搜索