Programing/Springboot

Java springboot nkzawa socket.io-client 소켓 클라이언트 구현 Java soket.io client

리커니 2018. 11. 6.
반응형

Java springboot nkzawa socket.io-client 소켓 클라이언트 구현 Java soket.io client

 

[gradle 의존성 주입]

 

compile group: 'com.github.nkzawa', name: 'socket.io-client', version: '0.5.0'

 

[SocketClient. Class]

 
import java.net.URISyntaxException;

import org.json.simple.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.github.nkzawa.emitter.Emitter;
import com.github.nkzawa.socketio.client.IO;
import com.github.nkzawa.socketio.client.Socket;

@Service
public class SocketClient {
    private static final Logger logger = LoggerFactory.getLogger(SocketClient.class.getName());
    private static final String SERVERURL = "http://서버ip:서버port";
    private static Socket mSocket;
    
    public void onCreate() {
        try {
            mSocket = IO.socket(SERVERURL);
            mSocket.on(Socket.EVENT_CONNECT, onConnect);
            mSocket.on(Socket.EVENT_ERROR, onError);
            mSocket.on("받을 메시지 이벤트 String", onMessageReceived);
            mSocket.on(Socket.EVENT_DISCONNECT, onDisconnect);
            mSocket.connect();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }
    @SuppressWarnings("unchecked")
    private Emitter.Listener onConnect = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            logger.info("onConnect");
            JSONObject jobj = new JSONObject();
            JSONObject subJobj = new JSONObject();
            subJobj.put("evt", true);
            jobj.put("arg", subJobj);
            jobj.put("cmd", "요청 이벤트 메시지 String");
            mSocket.emit("fromClient", jobj);
        }
    };
     
    private Emitter.Listener onError = new Emitter.Listener() {
        @Override
        public void call(Object... arg0) {
            logger.info("onError");
        }
    };
    
    private Emitter.Listener onMessageReceived = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            logger.info("onMessageReceived");
            System.out.println(args[0]);
        }
    };
    
    private Emitter.Listener onDisconnect = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            logger.info("disConnect");
        }
    };
}

 

Spring boot 프로젝트가 실행될 때 SocketClient의 onCreate 메소드를 실행시켜주면 소켓 서버와 연결이 되며,

연결에 성공하면 onConnect, 실패하면 onDiscoonect 메소드가 실행됩니다.

 

위의 소스의 경우 소켓 서버와 연결이 되면 서버쪽에 JSONObject 타입으로 요청메시지를 전송합니다. (emit)

서버쪽에서 응답이 올 경우 onMessageReceived 메소드로 데이터가 오게 되며,

받은 데이터로 로직에 맞게 처리 하시면 됩니다.

 

24Line 을 보시면 받을 메시지에 따라서 다른 메서드를 호출할 수 있다는 것을 알 수 있습니다.

예를들어 서버에서 'getMessage' 이벤트 메시지를 클라이언트로 부터 받으면 'rcvMessage' 이벤트 메시지로 보낸다고 한다면

 

24Line을

mSocket.on("rcvMessage", onMessageReceived);

 

36~41 Line을

mSocket.send("getMessage");

 

이런식으로 설정하시면 됩니다.

 

emit과 send의 차이는 커스텀 이벤트 메시지를 보낼 것인가 일반 이벤트 메시지만 보낼 것인가의 차이 입니다.

 

반응형

댓글

💲 추천 글