메시지 버스가 디스코스 채팅에서 헤더를 중복해서 전송합니다

여러분 안녕하세요

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"을 통해 폴링을 수행하며, 이때 요청 헤더가 중복되는 것을 확인할 수 있었습니다. 예를 들어 다음과 같습니다:
image

이것은 제 사이트에서는 정상적으로 작동하지만, 외부 사이트나 모바일 앱에서 요청을 시도하면 다음과 같은 오류가 발생합니다:

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의 예시를 참고하고 있습니다.

이 문제에 대해 방향성이나 작은 도움이라도 주신다면 매우 감사하겠습니다 :pray:

정말 감사합니다

헤더는 여기서 모두 설정되어 있습니다:

이로써 질문에 답이 될까요?

빠른 답변 감사합니다.

즉, 제가 이해한 바로는 message_bus가 자체 "Headers"를 설정하는 것이 맞나요? Discourse 설정에서 이미 설정된 “Headers”, 특히 CORS 동작과 관련된 헤더를 사용할 수 있는 방법이 있을까요?

message_bus를 사용할 때 중복된 "headers"를 피하고 싶습니다. 이렇게 하면 포럼 사이트 외부에서 요청을 보낼 수 있습니다.

일반적인 설정에서 꽤 많이 벗어났습니다. 해당 파일을 꼼꼼히 읽어보세요. 모든 답이 그 안에 있을 겁니다.

맞습니다. 그렇다면 사이트 외부(예: PWA나 모바일 하이브리드 앱)에서 message_bus를 사용하려면 어떤 조언을 주실 수 있을까요?

예를 들어 이미 만들어 주신 JavaScript 라이브러리를 사용하여 message_bus를 외부 클라이언트로 사용하고자 합니다. https://github.com/discourse/message_bus/tree/main?tab=readme-ov-file#javascript-client

이 사용자가 어떻게 이런 일을 해냈는지 궁금합니다.

그는 여러 기기에서의 진행 상황을 보여주는 유튜브 영상을 여기에 게시했습니다.

discourse 사이트 외부에서 message_bus gem을 사용할 수 있는 방법이 있어야 합니다.

조금 더 자세히 안내해 주시거나, 아이디어를 주실 수 있다면 정말 감사하겠습니다.

이것은 너무 사용자 정의가 많이 되어 있어서 제가 여기서 조언을 드리기 어렵습니다. 더 많은 분들이 메시지 버스를 사용하시는 것을 완전히 이해하지만, 결국 직접 디버깅을 통해 문제를 해결하셔야 합니다.