supscription 지원 추가

묘사

계속해서 this issue 구독 지원 추가에 대한 토론을 진행한다.여기에 아폴로/고에주 구독의 예가 하나 있다.그러나 아폴로 측의 구독 지원은 문서가 많지 않은 것 같다.API reference에서 전혀 언급하지 않았다.
하나SubscriptionNetworkInterfacehere가 있습니다.그래서 나는 우리가 이 환매 협의에 의해 만들어진 네트워크 인터페이스에 subscribeunsubscribe 방법을 추가해야 한다고 생각한다.
아니면 구독을 위한 단독 네트워크 인터페이스를 설정해야 합니까?this repo

토론 #1

를 참고하십시오. 제 첫 번째 추측은 subscriptions-transport-ws는 ws-protocol 부분일 뿐입니다. 웹소켓 연결, 가입 등을 처리합니다(코드를 깊이 연구하지 않았기 때문에 확실하지 않습니다).우리의 예에서, 이것은 phoenix.js (phoenix가 다중으로 메시지를 전송하는 데 사용하는 작은 프로토콜, 플러그인 심장 박동 등을 처리하는 것) 에 해당한다고 생각합니다. 이번 주에 이것을 볼 시간이 있는지 모르겠지만, 당신의 연구에 매우 감사드립니다.
만약 시간이 있다면, 나는 첫 번째 단계는 현지에서 쑥주를 사용하는 예를 말하고, 포엔식스 소켓을 사용하여 클라이언트로부터 무엇을 필요로 하는지 이해할 것이다.
Apollo 구독 문서에 대해 그렇습니다. 그들은 watch 구독(윤문)을 기록했지만 gql 구독을 기록하지 않았습니다. 넷워크 인터페이스를 보십시오. 그러한 subscribeunsubscribe 방법도 넷워크 인터페이스 api의 일부분이 아니지만 이를 실현하고 어떻게 작동하는지 볼 수 있습니다.
다시 한 번 감사합니다:)

토론 #2

@vic 피드백에 감사 드립니다!네, 이 저장소를 한층 더 조사한 후에, 나는 그것이 아폴로의 네트워크 인터페이스 층이 아니라는 것을 깨달았습니다.
나는 이미 로컬에서 이 예시를 설정했다.나는 여기서 결과를 묘사할 것이다.이 예는 __absinthe__:control라는 채널을 사용합니다.다음은 가입 메시지입니다.
{
    "topic": "__absinthe__:control",
    "event": "doc",
    "payload": {
        "query": "\n      subscription Messages {\n        message(room: \"lobby\") {\n          body\n          author { name }\n        }\n      }\n      ",
        "variables": {}
    },
    "ref": "2"
}
답변:
{
    "topic": "__absinthe__:control",
    "ref": "2",
    "payload": {
        "status": "ok",
        "response": {
            "ref": "__absinthe__:14874113"
        }
    },
    "event": "phx_reply"
}
그리고 돌연변이를 보냅니다.
{
    "topic": "__absinthe__:control",
    "event": "doc",
    "payload": {
        "query": "\n          mutation SendMessage($body: String!, $user: String!) {\n            sendMessage(room: \"lobby\", body: $body, user: $user) {\n              __typename\n            }\n          }\n          ",
        "variables": {
            "body": "test message",
            "user": "test"
        }
    },
    "ref": "4"
}
다음 답변:
{
    "topic": "__absinthe__:control",
    "ref": "4",
    "payload": {
        "status": "ok",
        "response": {
            "data": {
                "sendMessage": {
                    "__typename": "Message"
                }
            }
        }
    },
    "event": "phx_reply"
}
구독 응답:
{
    "topic": "__absinthe__:control",
    "ref": null,
    "payload": {
        "data": {
            "message": {
                "body": "test message",
                "author": {
                    "name": "test"
                }
            }
        }
    },
    "event": "subscription:data"
}

토론 #셋

그래서 내가 본 유일한 차이점은 조회는'구독'subscription:data 이벤트/방을 조회하고 그 어떠한 결과도 관찰 대상에게 전달해야 한다는 것이다.

토론 #4

@conor mac aoidh 구독을 지원하기 위해 코드를 재구성했습니다. feature/subscription 지점에서 볼 수 있습니다. 테스트를 실행해야 합니다. 예시phoenix chat 백엔드에 사용해 보십시오.

좋은 웹페이지 즐겨찾기