반응형
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의 차이는 커스텀 이벤트 메시지를 보낼 것인가 일반 이벤트 메시지만 보낼 것인가의 차이 입니다.
반응형
'Programing > Springboot' 카테고리의 다른 글
Eclipse Spring boot Gradle 프로젝트 간단 생성 방법 (0) | 2019.10.17 |
---|---|
Redis pub/sub 사용 중 발생 에러 Spring Data repository 관련 (0) | 2019.06.24 |
Spring boot jetty websocket 서버 개발, 웹소켓 서버 구현 (2) | 2018.09.26 |
Springboot logback 설정하기, 콘솔 및 파일저장 (1) | 2018.08.17 |
SpringBoot Redis(Jedis) 활용 Publish/Subscribe pub/sub 구현 방법 (0) | 2018.08.13 |
댓글