파이썬 플라스크로 간단한 웹서버 게임서버 만들려고합니다.

조회수 1918회

안녕하세요. 파이썬 플라스크를 사용해 간단한 게임 서버를 만들려고 합니다. 입력을 보냈을때에 서버로데이터를 보내고 받는거 까지는 했는데 다른 유저에대한 동기화를 하고 싶은데 어떤방식으로 입력을 보내지 않았을때도 동기화 하게 만드는것이 가능할까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

2 답변

  • http통신은 클라이언트에서만 요청을 보낼 수 있습니다. 능동적으로 서버가 데이터를 보낼 수 없죠. 그렇다고 http(s)로 불가능한 것만은 아닙니다. 주기적으로 요청을 보내서(polling) 싱크된 데이터를 받는 방법이 있죠. 다만 이 방식은 latency가 크고 매 요청당 서버-클라이언트 연결을 맺는 오버헤드도 만만치 않을 뿐더러 실제 주고 받아야할 데이터 외에 불필요한 메타 데이터들이 많아서 통신량이 상대적으로 많아집니다. 실시간 상황이 표시되어야 하는 종류의 게임이라면 문제는 더 커지죠.

    그래서 양방향 커뮤니케이션이 가능한 socket통신을 사용해야 합니다. 한 번 연결을 맺으면 적은 비용으로 통신이 가능하기 때문입니다.

    소켓 관련 low level API를 직접 다루는 것 보다는 flask-socket.io를 사용하는게 괜찮을 것 같네요.

    • 흠 기존 방법을 어케든 해볼려고 생각하고 있었는데새로운 방법을 제안해주셧내여. 감사합니다^^ 좋은 하루 보내세요. 알 수 없는 사용자 2018.10.15 10:59
    • 위에 되게 나쁘게 적은거 같은데 polling이 나쁜게 아닙니다. 게임 특성에 맞는다면 충분히 고려해 볼 사항입니다. 실제로 데이터 갱신 및 페이지 싱크를 유지하기 위해서 polling은 꽤 여러군데서 솔루션으로 채택하고 있어요. 웹게임도 '완전 실시간이 필요하다' 정도가 아니면 polling으로 구현하시는게 더 쉬울 수 있을 것 같네요. doodoji 2018.10.15 11:02
  • 동기화 문제는 websocket 으로 해결하는 편이 가장 편합니다.

    현재의 브라우저들이 websocket 은 지원하고 있으므로 server push 구현을 위해 가장 보편적인 솔루션입니다.

    과거에는 특별한 대안이 없어서 long pooling 등 을 사용하여 comet 을 구현했었습니다만 지금은 아닙니다.

    flask-socket.io 의 문서를 보니 eventlet 을 사용할 수 있어서 websocket 도 지원하는 것으로 보입니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)