jandres
(Julian)
2월 7, 2024, 10:12오후
1
여러분 안녕하세요
Discourse가 새로운 메시지와 이벤트를 실시간으로 수신하기 위해 사용하는 메시지 버스(message-bus) 기능이 어떻게 작동하는지 이해하려고 하고 있습니다. 특히 최신 Discourse 채팅 플러그인에서 어떻게 사용되는지에 관심이 있습니다.
@sam이 https://meta.discourse.org/t/how-discourse-stays-online-message-bus-faye-long-polling/3238/7?u=jandres 에서 설명한 내용을 바탕으로, 이 기능을 기존에 존재하는 기능들과 함께 모바일 애플리케이션에 통합하고 싶습니다.
리버스 엔지니어링을 해보니 채팅방에 진입할 때마다 메시지 버스가 "https://mysite.com/message-bus/client_id/poll "을 통해 폴링을 수행하며, 이때 요청 헤더가 중복되는 것을 확인할 수 있었습니다. 예를 들어 다음과 같습니다:
이것은 제 사이트에서는 정상적으로 작동하지만, 외부 사이트나 모바일 앱에서 요청을 시도하면 다음과 같은 오류가 발생합니다:
Access to XMLHttpRequest at 'https://forum-dev.srepe.com/message-bus/f6e2303ff7704f608ef2b821fe210e90/poll'
from origin 'http://localhost:8100' has been blocked by CORS policy:
The 'Access-Control-Allow-Origin' header contains multiple values
'https://forum-dev.srepe.com, *', but only one is allowed.
다른 모든 라우트는 정상적으로 작동하지만, 메시지 버스를 사용하려고 하면 이 문제가 발생합니다. 저는 GitHub 저장소의 https://github.com/discourse/message_bus/tree/main/examples/chat 에 있는 @sam의 예시를 참고하고 있습니다.
이 문제에 대해 방향성이나 작은 도움이라도 주신다면 매우 감사하겠습니다
정말 감사합니다
jandres
(Julian)
2월 7, 2024, 11:17오후
3
빠른 답변 감사합니다.
즉, 제가 이해한 바로는 message_bus가 자체 "Headers"를 설정하는 것이 맞나요? Discourse 설정에서 이미 설정된 “Headers”, 특히 CORS 동작과 관련된 헤더를 사용할 수 있는 방법이 있을까요?
message_bus를 사용할 때 중복된 "headers"를 피하고 싶습니다. 이렇게 하면 포럼 사이트 외부에서 요청을 보낼 수 있습니다.
sam
(Sam Saffron)
2월 7, 2024, 11:19오후
4
일반적인 설정에서 꽤 많이 벗어났습니다. 해당 파일을 꼼꼼히 읽어보세요. 모든 답이 그 안에 있을 겁니다.
jandres
(Julian)
2월 7, 2024, 11:37오후
5
Sam Saffron:
일반적인 설정에서 꽤 벗어나고 있습니다.
맞습니다. 그렇다면 사이트 외부(예: PWA나 모바일 하이브리드 앱)에서 message_bus를 사용하려면 어떤 조언을 주실 수 있을까요?
예를 들어 이미 만들어 주신 JavaScript 라이브러리를 사용하여 message_bus를 외부 클라이언트로 사용하고자 합니다. https://github.com/discourse/message_bus/tree/main?tab=readme-ov-file#javascript-client
jandres
(Julian)
2월 13, 2024, 2:05오전
6
이 사용자가 어떻게 이런 일을 해냈는지 궁금합니다.
Yeah, the whole backend is powered by message_bus. The android/ios client long-polls. Not sure if this is the best use of message_bus, but It works w/o the added complexity of web sockets. The major win is that it fits in our existing rails stack. The only disadvantage i’ve come across so far is that I can’t find an elegant way to support the typing indicator.
http://www.eggie5.com/58-real-time-messenging-w-ruby-ios-android
그는 여러 기기에서의 진행 상황을 보여주는 유튜브 영상을 여기 에 게시했습니다.
discourse 사이트 외부에서 message_bus gem을 사용할 수 있는 방법이 있어야 합니다.
조금 더 자세히 안내해 주시거나, 아이디어를 주실 수 있다면 정말 감사하겠습니다.
sam
(Sam Saffron)
2월 13, 2024, 2:35오전
7
이것은 너무 사용자 정의가 많이 되어 있어서 제가 여기서 조언을 드리기 어렵습니다. 더 많은 분들이 메시지 버스를 사용하시는 것을 완전히 이해하지만, 결국 직접 디버깅을 통해 문제를 해결하셔야 합니다.