簡單易懂a(chǎn)ndroid?使用StompProtocol,實現(xiàn)stompc長鏈接迷扇,包含發(fā)送消息實例

  這是我的第一篇博客百揭,寫的不好之處歡迎指正!

  最近公司要做個聊天功能蜓席,使用到了stomp協(xié)議器一,參考了幾位前輩的文章,做個總結厨内,需要的小伙伴請拿走不謝祈秕。

  關于stomp是什么可參考:http://www.reibang.com/p/cee941ca0c09。

  項目里之前用的okhttp3,但是okhttp3不支持stomp雏胃,無奈请毛,我只好另引入了一個庫。

  StompProtocol官網(wǎng)地址:https://github.com/NaikSoftware/StompProtocolAndroid

  1瞭亮,引入依賴

  在項目app目錄下的build.gradle文件中添加

  dependencies{

  api"com.github.NaikSoftware:StompProtocolAndroid:1.6.4"

  api"io.reactivex.rxjava2:rxjava:2.2.5"

  }

  2,創(chuàng)建連接

  publicclassMainActivityextendsAppCompatActivity{

  privateStompClientmStompClient;

  //存放訂閱的容器類方仿、用來做資源回收,以免訂閱沒有被取消造成內存泄漏统翩。

  privateCompositeDisposablecompositeDisposable;

  @Override

  protectedvoidonCreate(BundlesavedInstanceState){

  super.onCreate(savedInstanceState);

  //隱藏標題欄

  supportRequestWindowFeature(Window.FEATURE_NO_TITLE);

  setContentView(R.layout.activity_main);

  //初始化mStompClient仙蚜,第二個參數(shù)填入你預連接的服務器地址。

  mStompClient=Stomp.over(Stomp.ConnectionProvider.OKHTTP,url);

  resetSubscriptions();

  connectStomp();

  }

  publicvoidconnectStomp(){

  //頭信息集合唆缴,根據(jù)需要傳入

  List<StompHeader>stompHeaderList=newArrayList<>();

  mStompClient.withClientHeartbeat(1000).withServerHeartbeat(1000);

  resetSubscriptions();

  //注意以下兩個Disposable對象鳍征,第一個是創(chuàng)建連接的,第二個是創(chuàng)建訂閱的,訂閱可根據(jù)實際需求確定是否添加面徽。

  DisposabledispLifecycle=mStompClient.lifecycle()

  .subscribeOn(Schedulers.io())

  //.observeOn(AndroidSchedulers.mainThread())

  .subscribe(lifecycleEvent->{

  switch(lifecycleEvent.getType()){

  caseOPENED:

  //連接成功

  break;

  caseERROR:

  Log.e(TAG,"Stompconnectionerror",lifecycleEvent.getException());

  //出錯了

  break;

  caseCLOSED:

  //連接被關閉艳丛,可以在這里做重連操作匣掸。

  resetSubscriptions();

  connectStomp();

  break;

  caseFAILED_SERVER_HEARTBEAT:

  break;

  }

  });

  //將連接的Disposable對象加入compositeDisposable

  compositeDisposable.add(dispLifecycle);

  //訂閱

  DisposabledispTopic=mStompClient.topic("填入你的訂閱地址")

  .subscribeOn(Schedulers.io())

  //.observeOn(AndroidSchedulers.mainThread())

  .subscribe((StompMessagetopicMessage)->{

  Log.d(TAG,"Received"+topicMessage.getPayload());

  //取出消息,做邏輯處理

  Stringbody=topicMessage.getPayload();

  },throwable->{

  //出錯了

  Log.e(TAG,"連接錯誤",throwable);

  });

  //將訂閱的Disposable對象加入compositeDisposable

  compositeDisposable.add(dispTopic);

  //連接

  mStompClient.connect(stompHeaderList);

  }

  privatevoidresetSubscriptions(){

  if(compositeDisposable!=null){

  compositeDisposable.dispose();

  }

  compositeDisposable=newCompositeDisposable();

  }

  3氮双,發(fā)送消息

  //第一個參數(shù)傳訂閱的路徑碰酝,第二個傳要發(fā)送的消息

  //注意必須調用subscribe()函數(shù)。

  mStompClient.send(path,object.toString()).subscribe();

  4戴差,資源回收

  @Override

  publicvoidonDestroy(){

  //關閉連接和資源回收

  mStompClient.disconnect();

  if(compositeDisposable!=null){

  compositeDisposable.dispose();

  }

  handler.removeCallbacksAndMessages(null);

  super.onDestroy();

  }

  5送爸,添加全局異常補貨,否則連接失敗后會閃退

  RxJavaPlugins.setErrorHandler(newConsumer<Throwable>(){

  @Override

  publicvoidaccept(Throwablethrowable)throwsException{

  }

  });

  最后別忘了在AndroidManifest.xml文件中添加網(wǎng)絡訪問權限

  <uses-permissionandroid:name="android.permission.INTERNET"/>

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末暖释,一起剝皮案震驚了整個濱河市袭厂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌球匕,老刑警劉巖纹磺,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亮曹,居然都是意外死亡橄杨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門照卦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來式矫,“玉大人,你說我怎么就攤上這事役耕〔勺” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵蹄葱,是天一觀的道長氏义。 經(jīng)常有香客問我,道長图云,這世上最難降的妖魔是什么惯悠? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮竣况,結果婚禮上克婶,老公的妹妹穿的比我還像新娘。我一直安慰自己丹泉,他們只是感情好情萤,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著摹恨,像睡著了一般筋岛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晒哄,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天睁宰,我揣著相機與錄音肪获,去河邊找鬼。 笑死柒傻,一個胖子當著我的面吹牛孝赫,可吹牛的內容都是我干的。 我是一名探鬼主播红符,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼青柄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了预侯?” 一聲冷哼從身側響起致开,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萎馅,沒想到半個月后喇喉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡校坑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了千诬。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耍目。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖徐绑,靈堂內的尸體忽然破棺而出邪驮,到底是詐尸還是另有隱情,我是刑警寧澤傲茄,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布毅访,位于F島的核電站,受9級特大地震影響盘榨,放射性物質發(fā)生泄漏喻粹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一草巡、第九天 我趴在偏房一處隱蔽的房頂上張望守呜。 院中可真熱鬧,春花似錦山憨、人聲如沸查乒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽玛迄。三九已至,卻和暖如春棚亩,著一層夾襖步出監(jiān)牢的瞬間蓖议,已是汗流浹背虏杰。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拒担,地道東北人嘹屯。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像从撼,于是被迫代替她去往敵國和親州弟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內容

  • 前言RxJava和Retrofit也火了一段時間了低零,不過最近一直在學習ReactNative和Node相關的姿勢婆翔,...
    AFinalStone閱讀 549評論 0 0
  • RxJava和Retrofit的依賴 //rxjava依賴 implementation'io.reactiv...
    慕名66閱讀 250評論 0 0
  • 轉載自:https://xiaobailong24.me/2017/03/18/Android-RxJava2.x...
    Young1657閱讀 2,020評論 1 9
  • 學習筆記,自用掏婶,整理中 摘要: 重要是Rxjava思路: 響應式開發(fā)啃奴,一種管理思想,起點分發(fā)事件雄妥,一條線往下走最蕾,中...
    亢正閱讀 205評論 0 0
  • 為什么要使用RxJava處理Retrofit網(wǎng)絡請求Retrofit的調用過程我們前面文章已經(jīng)整理過了,對于And...
    Horps閱讀 413評論 0 1