Simple Text Oriented Messaging Protocol
👊 Setting
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
dependencies {
implementation 'com.github.NaikSoftware:StompProtocolAndroid:1.6.6'
}
https://github.com/NaikSoftware/StompProtocolAndroid를 이용하였다.
1. STOMP 생성 및 Connect
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
private StompClient stompClient;
private List<StompHeader> headerList;
public void initStomp(){
stompClient= Stomp.over(Stomp.ConnectionProvider.OKHTTP, wsServerUrl);
stompClient.lifecycle().subscribe(lifecycleEvent -> {
switch (lifecycleEvent.getType()) {
case OPENED:
Log.d(TAG, "Stomp connection opened");
break;
case ERROR:
Log.e(TAG, "Error", lifecycleEvent.getException());
if(lifecycleEvent.getException().getMessage().contains("EOF")){
isUnexpectedClosed=true;
}
break;
case CLOSED:
Log.d(TAG, "Stomp connection closed");
if(isUnexpectedClosed){
/**
* EOF Error
*/
initStomp();
isUnexpectedClosed=false;
}
break;
}
});
// add Header
headerList=new ArrayList<>();
headerList.add(new StompHeader("Authorization", G.accessToken));
stompClient.connect(headerList);
}
- 먼저 stomp.over()로 stompClient를 생성한다.
- 첫 번째 파라미터는 connection이다. 현재 OkHttp와 JWS가 가능하다.
- 두 번째 파라미터는 연결하고자 하는 서버 주소이다.
- 다음은 stompClient의 lifeCycle에 따라 필요한 조건이 있을 경우 선언한다.
- 헤더에 추가해야할 것이 있다면 StompHeader()를 이용해서 만든다.
- 이제 connect()로 연결!
⭐⭐주소는 ws
- 연결하려는 주소가 http로 시작하면 ws, https는 wss로 시작하며, 마지막에 /websocket을 꼭 붙여야 한다.
- connect에 성공하면 101을 받는다.
2. Send, Subscribe
1
2
3
4
5
6
7
8
9
10
11
/**
* 보낼 JSONObject 만들기
* */
stompClient.send("send할 주소", jsonObject.toJSONString()).subscribe();
stompClient.topic("subscribe할 주소").subscribe(topicMessage -> {
JSONParser parser=new JSONParser();
Object obj=parser.parse(topicMessage.getPayload());
...
});
- tooooooo easy!0!
- send()할때 뒤에 .subscribe() 잊지 말자.