36. 게임 로직 코드 (예: 아이템 파기 코드) DestroyItem op = new DestoryItem(cid, slot); op.Success += () =>{ 성공 메시지 전달; }; op.Fail += () => { 실패 메시지 전달; }; RequestOperation(“ItemService”, op); 실제 코드와는 차이가 있습니다.
37. 개발 프로세스 책임을 맡은 서비스를 구현 그 서비스가 처리할 오퍼레이션들을 구현 클라이언트의 요청에 따라 적당한 오퍼레이션을 호출 결과를 클라이언트에 전달
40. 사내테스트 당시 Party Service Frontend Service Unified Network Story Service Character Service Microplay Service Item Service Postal Service Quest Service
41. 사내 서비스 후 생각보다 저조한 성능 서비스 1종 = 물리적 서버 1대로도 부족 이대로는 단일서버 서비스 불가
42. 그래서통합 네트워크 개선 작업 1) 성능 향상 다루지 않음 2) 동일한 서비스를 여러 개 띄운 경우 분산 매커니즘 구현 병목이 되는 서비스를 여러 서버 기계에 걸쳐서 여러 개 띄울 수 있도록
44. 서비스에 오퍼레이션 요청 DestroyItem op = new DestoryItem(cid, slot); RequestOperation(“ItemService”, op); 아이템 서비스가 여러 개면? 둘 이상의 서비스가 같은 아이템에 접근 한 아이템은 한 서비스가 처리하도록 보장하는 매커니즘 필요
45. 엔티티 분산 처리의 단위 “한 캐릭터의 인벤토리 전체” “한 캐릭터의 우편함 전체” “전투 1회” 등을 하나의 엔티티로 구현 하나의 엔티티는 한 서비스에서 담당
46. 엔티티 오퍼레이션 Service Service Operation Entity Entity Entity Entity Operation Entity Entity Entity Entity
47. 엔티티 획득 같은 종류의 서비스가 여러 개 있는 경우 엔티티 중복 로드 방지 프로토콜 DB를 통해 동기화 유지
48. 엔티티 간 연결 유지 엔티티 찾기 매커니즘이복잡하고 비싸다 오퍼레이션을 보낼 때마다 엔티티를 새로 찾으면 낭비 엔티티 간에 파이프를 열어두고 유지 엔티티가필요없어지면 모든 연결을 닫고 엔티티언로드 로그아웃, 전투 종료 등
49. 변경된 게임 로직 코드 (로그인할 때) ItemConnection = service.Connect(clientEntity, cid, “ItemService”); (아이템 파기) DestroyItem op = new DestoryItem(slot); op.Success += () => { 성공 메시지 전달; }; op.Fail += () => { 실패 메시지 전달; }; ItemConnection.Request(op); CID가 오퍼레이션에서 사라짐