> 백엔드 개발 > Golang > 롱 폴링을 사용하여 gRPC 서버-클라이언트 브로드캐스팅을 구현하는 방법은 무엇입니까?

롱 폴링을 사용하여 gRPC 서버-클라이언트 브로드캐스팅을 구현하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-01 20:06:02
원래의
808명이 탐색했습니다.

How to Implement gRPC Server-to-Client Broadcasting with Long-Polling?

gRPC 서버-클라이언트 브로드캐스팅

gRPC에서는 서버에서 연결된 여러 클라이언트로 이벤트를 브로드캐스트할 때 일반적인 문제가 발생합니다. 제시된 질문에서는 특히 연결된 사람과 각 클라이언트의 주소를 지정하는 방법을 서버가 알고 있는 스트림을 사용하여 이를 달성하는 방법에 대한 지침을 구합니다.

장기 폴링 접근 방식 활용

스트림의 대안 솔루션은 장기 폴링 접근 방식을 구현하는 것입니다. 이 기술에는 클라이언트가 서버에 지속적인 요청을 보내 연결을 유지하는 것이 포함됩니다. 서버에서 이벤트가 발생하면 대기 중인 모든 클라이언트에게 알리고 종료하고 새 요청을 생성하라는 메시지를 표시합니다.

장기 폴링용 코드 샘플

다음 코드 샘플은 Python에서 장기 폴링을 구현하는 방법을 보여줍니다.

.PROTO 정의

<code class=".PROTO">service Updater {
    rpc GetUpdates(GetUpdatesRequest) returns (GetUpdatesResponse);
}

message GetUpdatesRequest {
    int64 last_received_update = 1;
}

message GetUpdatesResponse {
    repeated Update updates = 1;
    int64 update_index = 2;
}

message Update {
    // Your update structure
}</code>
로그인 후 복사

서버 코드

<code class="python">class UpdaterServer(UpdaterServicer):
    def __init__(self):
        self.condition = threading.Condition()
        self.updates = []

    def post_update(self, update):
        with self.condition:
            # Remove old updates after some time
            self.updates.append(updates)
            self.condition.notify_all()

    def GetUpdates(self, req, context):
        with self.condition:
            while self.updates[req.last_received_update + 1:] == []:
                self.condition.wait()
            new_updates = self.updates[req.last_received_update + 1:]
            response = GetUpdatesResponse()
            for update in new_updates:
                response.updates.add().CopyFrom(update)
            response.update_index = req.last_received_update + len(new_updates)
            return response</code>
로그인 후 복사

클라이언트의 별도 스레드

<code class="python">request = GetUpdatesRequest()
request.last_received_update = -1
while True:
    stub = UpdaterStub(channel)
    try:
        response = stub.GetUpdates(request, timeout=60*10)
        handle_updates(response.updates)
        request.last_received_update = response.update_index
    except grpc.FutureTimeoutError:
        pass</code>
로그인 후 복사

이 예는 클라이언트가 긴 폴링을 사용하여 서버에서 시작된 스트림 없이 업데이트를 수신할 수 있는 방법을 보여줍니다.

위 내용은 롱 폴링을 사용하여 gRPC 서버-클라이언트 브로드캐스팅을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿