-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation
Description
WebSocket API 사용법
0. 서론
- Modo 서버의 웹소켓은
STOMP라이브러리를 활용했습니다. 각 파트 별 STOMP 라이브러리 임포트 해서 기본 설정 해주시면 감사하겠습니다. - 웹 프론트 환경의 경우, 초기에 STOMP Client를 만들 때 CORS 에러가 발생할 수 있습니다. 해당 부분 유의하셔서 개발 중에 만약 에러 발생하면 바로 알려주시면 감사하겠습니다.
1. 엔드포인트
-
Client -> Server sending endpoint : /app/sendMessages
클라이언트가 메세지를 전송할 때는 오직 한 개의 엔드포인트로 전송하면 됩니다. -
Server -> Client sending endpoint : /topic/{$usersId}
서버에서 클라이언트로 메세지 전송 시에는 위와 같이 각 사용자 PK에 맞는 URL로 전송합니다. 따라서 각자 로그인 중인 사용자의 PK를 조합해서 URL을 구독하시면 됩니다. -
WebSocket Broker endpoint : ws://modolib.com/modo-websocket
아마 각자 STOMP 라이브러리에서 brokerURL을 셋팅하는 부분이 있을 겁니다. 해당 URL 사용하시면 됩니다.
2. 사용법
- 메세지 전송 시에는
ChatSendingMessages객체를 Body에 담아서 보내주시면 됩니다.
public class ChatSendingMessages {
private Long booksId;
private String sender;
private String receiver;
// timeStamp 수정 완료
private String content;
// 이하 생략sender에는 대여자 또는 구매자, receiver에는 판매자 (책 주인) usersId를 담아주시면 됩니다. booksId에는 거래하고자 하는 책의 PK, 그리고 content에는 보내는 내용을 같이 넣어 주시면 됩니다.
등록된 책 화면에서 바로 메세지를 전송할 때는 채팅방의 유뮤나 채팅방의 PK를 알 수 없습니다. 그래서 위의 API 하나를 사용해서 채팅방 조회 (없다면 채팅방 생성 후 조회) 및 전송까지 하나로 통합되어 있으니, 그대로 사용하시면 됩니다.
- 메세지 수신 역시
ChatSendingMessages객체가 전송될 예정입니다.
3. 논의점
- 채팅 화면을 보지 않은 상태로 메세지 전송 및 수신은 위와 같이 진행하면 될 것 같습니다만, 채팅 리스트가 있을 때 클릭 후 채팅방으로 이동해서 메세지를 보내는 경우에는 어떤 식으로 처리할 지 논의가 필요합니다. 이때는 이미 채팅방의 PK를 알 수 있는 상황이기에 이를 사용하는게 나을지 아니면 기존의 API를 그대로 사용하는게 나을지 검토해야 합니다.
- 또한 위의
ChatSendingMessages객체를 JSON화해서 수신한다고 가정하면, 해당 메세지가 속한 채팅방의 PK를 수신자가 알 수 없습니다. 이 역시 추가적인 논의가 필요합니다.
Metadata
Metadata
Assignees
Labels
documentationImprovements or additions to documentationImprovements or additions to documentation