"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 장기 폴링 접근 방식을 사용하여 gRPC에서 서버-클라이언트 이벤트 브로드캐스팅을 어떻게 구현할 수 있나요?

장기 폴링 접근 방식을 사용하여 gRPC에서 서버-클라이언트 이벤트 브로드캐스팅을 어떻게 구현할 수 있나요?

2024-11-03에 게시됨
검색:943

How can you implement server-to-client event broadcasting in gRPC using a long-polling approach?

서버에서 클라이언트로 gRPC의 이벤트 브로드캐스팅

서버에 연결하는 여러 클라이언트와 관련된 애플리케이션을 만들 때 이벤트를 클라이언트로 브로드캐스팅해야 하는 경우가 많습니다. 연결된 모든 클라이언트. gRPC에는 이를 달성하기 위한 몇 가지 접근 방식이 있습니다.

고려해야 할 한 가지 옵션은 장기 폴링 접근 방식을 사용하는 것입니다. 여기에는 클라이언트가 정기적으로 업데이트를 위해 서버를 폴링하도록 하는 것이 포함됩니다. 이벤트가 발생하면 서버는 연결된 모든 클라이언트에 알리고 새 정보를 반환하도록 폴링 호출을 트리거합니다.

Python에서 장기 폴링 접근 방식을 구현하려면 다음 코드를 고려하세요. Go와 같은 다른 언어):

# SERVER
class UpdaterServer(UpdaterServicer):
    def __init__(self):
        self.condition = threading.Condition()
        self.updates = []

    def post_update(self, update):
        with self.condition:
            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

# SEPARATE THREAD IN CLIENT
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

이 예에서는:

  • post_update() 메서드를 사용하면 클라이언트가 이벤트에 대한 알림을 받을 수 있습니다.
  • 서버는 업데이트 목록을 유지하고 클라이언트에 알립니다. 새 업데이트가 출시되면 클라이언트는 주기적으로 서버를 폴링하여 업데이트를 기다립니다.
  • 이벤트가 발생하면 서버는 클라이언트의 폴링 호출을 트리거하여 업데이트된 정보를 반환합니다.
  • 장기 폴링 접근 방식을 사용하면 연결된 모든 클라이언트가 브로드캐스트 이벤트를 수신하고 여러 당사자에게 업데이트를 전달할 수 있는 안정적인 방법을 제공합니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3