플러터에서 stomp 연결을 하려면
stomp 라이브러리를 우선 삽입해준다.
https://pub.dev/packages/stomp_dart_client
stomp_dart_client | Dart Package
Dart STOMP client for easy messaging interoperability. Build with flutter in mind, but should work for every dart application.
pub.dev
플러터 터미널에서
dart pub add stomp_dart_client
or
flutter pub add stomp_dart_client
혹은
pubspec.yaml에서
dependencies:
stomp_dart_client: ^0.4.4
하면 된다.
import 'package:stomp_dart_client/parser.dart';
import 'package:stomp_dart_client/sock_js/sock_js_parser.dart';
import 'package:stomp_dart_client/sock_js/sock_js_utils.dart';
import 'package:stomp_dart_client/stomp.dart';
import 'package:stomp_dart_client/stomp_config.dart';
import 'package:stomp_dart_client/stomp_exception.dart';
import 'package:stomp_dart_client/stomp_frame.dart';
import 'package:stomp_dart_client/stomp_handler.dart';
import 'package:stomp_dart_client/stomp_parser.dart';
실행하는 화면 혹은 위젯에서 이렇게 넣고 코딩하면 되고 사용하지 않는 것은 지우면 된다.
class _ChatRoomScreenState extends State<ChatRoomScreen> {
late StompClient stompClient;
@override
void initState() {
super.initState();
print("웹 소캣 연결");
connectToStomp(); //stomp 연결
}
void connectToStomp() {
stompClient = StompClient(
config: StompConfig(
url: 'ws://10.0.2.2:9081/chat', // Spring Boot 서버의 WebSocket URL
onConnect: onConnectCallback, // 연결 성공 시 호출되는 콜백 함수
),
);
stompClient.activate();
}
void onConnectCallback(StompFrame connectFrame) {
stompClient.subscribe(
destination: '/topic/room.abc', // 구독할 주제 경로 abc방을 구독
callback: (connectFrame){
print(connectFrame.body); //메시지를 받았을때!
// 메시지 처리
},
);
}
@override
void dispose() {
stompClient?.deactivate();
// channel.sink.close();
super.dispose();
}
void sendMessage() {
String message = messageController.text;
stompClient.send(
destination: '/app/chat.enter.abc', // Spring Boot 서버의 메시지 핸들러 엔드포인트 경로 abc방에 보낸다
body: message,
);
print("전송!");
messageController.clear();
}
간단하게 작성한다면 이렇게된다. sendMessage()에서는abc라는 방으로 메시지를 보내고 있다.
또한 abc방을 구독하고 있기 때문에 메시지를 rabbitMQ에서 뿌린다면 받게 될것이다.
durable이나 autodelete를 조절하여 rabbiqmq의 큐를 계속 살려둘 수도 있다.
만약 원하는 시점에서 stompClient가 stomp에 접속 하게 하고 싶다면 ex)matching 시스템
stompClient를 NULLable로 설정하면 된다.
다만 이렇게 수행 할시 접속 되지 않아도 문제가 발생하지 않기 때문에 잘 관리 해주어야할 것 같고 다른 방법을 찾아보아야 할 것 같다.
반응형
'Spring boot' 카테고리의 다른 글
Spring Test code 같은 함수 중복시 (1) | 2024.12.16 |
---|---|
RabbitMQ + Spring boot로 Flutter용 채팅 만들기 1 (0) | 2023.06.09 |