본문 바로가기

Programming/Python

[Pycon KR 2017] Python 게임서버 RPC framework (Thirft편)

 RPC framework라는것을 배웠는데, 참 편리한거 같다.

 RPC는 Remote procedure call의 약자로 원격으로 프로시저를 호출한다고 할 수 있다. 또한 네트워크나 콜방식에 상관없이 프로그래머가 원격으로 함수를 실행할 수 있게 해준다. 또한 IDL을 사용한다.

게임서버에 RPC Framework를 적용한것에 배웠다.

먼저 페이스북에서 만든 Thirft다.

Thrift (θrift)
•“scalable cross-language services development” 를 위해 Facebook
에서 개발, RPC framework 로 사용됨
•다양한 언어를 지원 ( http...[각주:1]

Thrift
•Server, Processor, Protocol, Transport 로 구성
•Thrift 를 통해서 code 생성을 하면 RPC Client 코드도 생성
•서버 / 클라이언트 의 가장 큰 차이는 당연하...[각주:2]

간단히 Register - Login 서버를 짠다고 치면 아래와 같이 짤 수 있다.

othello.thrift
namespace csharp othello
struct User {
1: optional i64 id=0;
2: optional string token="";
3: optional strin...[각주:3]

먼저 왼쪽에는 유저와 플랫폼 타입을 설정했다.  ※Thrift는 Unsigned를 구별하지 않는다.

그다음 위쪽 동그라미는 , exception을 통해 에러를 반환할 수 있게한다.

그다음 아랫쪽 동그라미는 서비스 부분으로 User Register의 input parameter을 설정하고 thorows도 설정한다.

othello.server.py
import asyncio
import thriftpy
from aiothrift.server import create_server
# ...
othello = thriftpy.load(...[각주:4]

다음은 서버부분인데, 이 부분은 제대로 이해는 안되었으나 이해한 바로는 서버를 생성하고, 서비스를 넣어주며, 핸들러를 받고, 서버설정을 하고, 프로토콜을 넣어준다.

아래코드는  Login과 Register을 받으면 코드를 실행하고 user를 반환하게되는데,  아래 이미지에 있는 설명 처럼 db_transaction을 작성함으로써 processor에 반영하고 오류발생시 db를 rollback하는 것 까지 완료하였다.othello.server.py
class Dispatcher:
# ...
@db_transaction
def Login(self, platform_type, platform_token):
# ...
return use...[각주:5]

  1. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
  2. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
  3. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
  4. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
  5. 저작자 : 박준철, https://www.slideshare.net/joongom/python-rpc-framework-78718414 [본문으로]
반응형