ݺߣ

ݺߣShare a Scribd company logo
잭블랙이블랙잭을한다
JackBlackIsPlayingBlackJack
김명찬노석민송원석
팀원
김명찬 - 채널서버(로직), 클라이언트
송원석 - 채널서버(로직, DB), 로그인서버
노석민 - 채널서버(네트워크), 클라이언트
게임 서버 만드는 법을 가르쳐 주신
최흥배 교수님
만들려던 것
만들려던 것
만들려던 것
만들려던 것
만든 것
https://goo.gl/y16cju
만든 것
만든 것
만든 것
만든 기능
서버 설명
코드
만든 기능
구조
• 로그인 서버
• 채널 서버
• 클라이언트
만든 기능
채널 서버
로그인 서버
클라이언트
로그인요청
토큰발급
토큰정보 기록
DB (MySQL)
게임기록
조회
로그인
정보 조회
플레이
로그인 서버
• C#_Asp.Net, Http를 이용하여 구현
• 회원 가입 , 로그인
• 현재 게임에 접속중인 유저 (중복 로그인 방지)
• 현재 가동중인 서버 리스트를 관리 (IP주소 포함)
채널 서버
• C++, winsock, IOCP를 이용하여 구현
• 방 + 게임 진행
• 비어있는 방에 바로 집어넣음.
– 로비 등등 없음.
클라이언트
• C++, Cocos2d-x, winsock
• 로그인 서버와 http로 통신 (Cocos2d-x)
• 로그인 서버에게 받은 채널 목록에서 채널선택
기타
• 로비(룸 리스트)는 없고, 접속시 빈 방으로 빠른
참여
• 칩 충전은 횟수 제한 없음
• 유저마다 고유 포켓몬(아이콘)이 있다
기타
• 게임룰
– 17 soft stand
– Split : Only 1 time.
– Double down : Only when player has 2 cards.
서버
서버
• 로직 쓰레드 : 1개
• 네트워크 쓰레드 :
– 워커 쓰레드 다수
– 센드 쓰레드 1
– 리슨 쓰레드 1
• 디비 쓰레드
서버 구조
메인
스레드
작업 큐
IOCP
Listen
스레드
Worker
Worker
Worker
Worker
Awake
Enque
Deque
패킷 작업
로직
네트워크
• 리슨 쓰레드는 새로운 클라이언트가 들어올 때마
다 IOCP에 등록후 WSARecv 작업만을 반복한다.
서버 구조
메인
스레드
작업 큐
IOCP
Listen
스레드
Worker
Worker
Worker
Worker
Awake
Enque
Deque
패킷 작업
로직
네트워크
• 워커 쓰레드는 IOCP에 등록된 클라이언트들에게
서 받은 데이터가 있을 때마다
• 해당 데이터를 패킷으로 만들어서
RecvPacketQueue에 Push한다.
서버 구조 : Logic & DB
메인
스레드
send 큐로직 처리
DB
manager
DB담당
Send
스레드
전송
DB recv 큐
DB
스레드
DB
스레드
DB
스레드
DB
스레드
전송
응답
네트워크
• 센드 쓰레드는 SendPacketQueue를 주시하고 있
다가 내용물이 있다면 들어있는 패킷을 보내야 할
클라이언트에게 보낸다.
로직
• RecvPacketQueue에서 하나씩 꺼내서 처리한다.
• 클라이언트에게 알릴때는 SendPackQue 이용.
• DB작업이 필요할 경우 DB작업큐에 넣음
DB
• DB 쓰레드는 DB작업큐에 내용물이 들어올 때마다
해당 작업을 처리한 후 DB작업완료큐에 넣는다.
• 로직은 DB작업완료큐에 내용물이 들어올 때마다
미뤄두었던 해당 로직을 마저 처리한다.
클라이언트
• Recv 쓰레드 하나 띄워서 그냥 계속 Recv 하다
가 패킷 만들어서 메인쓰레드의 Job Queue에 넣
어줌
• 그 외 어쩌고 저쩌고 생략
힘들좋았아쉬웠던 점
힘들었던 점
• 멀티스레드 프로그래밍
– 의도했던 만큼 성능이 안 나오는데 이유를 몰라서 고생
– 처음 해봐서…. 공부는 많이 되었다.
• DB, ASP.NET, IOCP
– 처음 써보는 것들이 많아 노력에 비해 생산성이 많이 떨어짐
• 네트워크 게임을 처음 만들어봄
– 문제 발생 -> 로직 문제일거야 -> 형, 서버 코드 봐봐요 패킷 이
상하게 오는 것 같은데... -> 클라문제였음 -> 반복
좋았던 점
• 멀티스레드 프로그래밍
– 재미있다 하하
• 실력
– 정말 많이 늘었다.
– 기본에 대한 중요성을 많이 느낌.
시스템아키텍쳐, 네트워크에서 배웠던 내용들도..
• 온라인 게임!!!
– 초고수들만 만들 수 있는 건 줄 알았는데..
아쉬웠던 점
• 개발 기간 때문에 대충 타협하고 넘어간 부분들을 전
부 신경 써서 최적화하고 싶음.
• 동접자 테스트를 제대로 해보고 싶다.
• 모바일 버전으로 만들어 보고 싶다.
– Cocos2d-x를 썼으나, winsock을 쓴 데다 windows api를
여기저기 쑤셔 넣어서 포팅하려면 고생 좀 할 듯..
• 닌텐도와 잭블랙에게 라이선스를 받아
출시하고 싶다.
쌩큐
질문?

More Related Content

잭블랙이블랙잭을한다 - 최종발표