封裝Asterisk的AMI接口

做這個開發需要一定的網絡編程基礎,沒有基礎的人理解起來有些困難。把這些分享給大家的主要目的有兩個:一個是讓大家知道如何封裝AMI接口,另一個是讓大家對這次創業有全方位的體驗。

AMI的封裝結構如下:
170459142.jpg

說明:

  • 用Socket跟Asterisk的manager接口建立連接,一般是5038端口

  • 連接建立後,開兩個線程分別用於網絡的讀和寫:Reader、Writer

    • Reader從AMI獲取的信息有兩種:Event和Response

    • Event是Asterisk中的對象發生變化時往外推送的事件信息,比如電話接通、掛斷等。根據這些事件我們可以知道系統中各個對象的狀態。

    • Response是我們通過Writer發送的Action(操作)的返回結果,告訴我們這次操作的結果。因爲發送Action和收到Response是分兩個線程來組,是異步的。但有的時候我們發送完需要等待結果再返回,這個時候就多了一個Syn來做同步。

    • 同步Syn。這個Syn非常簡單,發送完Action之後,把Action放到一個map裏面,用ActionID作爲key;用Action對象Wait,然後處理Response,一旦Response的ActionID在map中能找到,就從map中獲取這個Action並notify。

  • Listener是對外封裝的一個接口類,用於事件的提醒,包括Event和Response

  • AMIClient是最外層的封裝類,別的模塊初始化這個類,並利用它和AMI通訊


代碼就不貼了,很簡單的。有一個小技巧,和AMI建立長連接時,經常會遇到連接斷開。這時可以開一個線程,每20秒發送一個PING請求,一方面能保持連接活躍,另一方面也可以用來做檢測和自動重連。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章