좋은 발표자료 잘 들었습니다. 도움 많이 되었습니다. 정말 감사합니다. 설명하신 패킷처리 과정 중에 하나 궁금한 점이 있습니다. 방식 (1) IOCP를 통해 WorkerThread가 패킷 재조립 후 바로 처리하는 방식 방식 (2) IOCP를 통해 WorkerThread가 패킷내용을 Write Buffer에 기록 => 하나 이상의 패킷 재조립이 완료 되었을때 Write, Read Buffer 더블버퍼링을 적용 후 MainThread에 통지 => Read Buffer에 갱신된 내용을 보고 MainThread에서 패킷 처리 일단 이렇게 이해하였습니다. 질문내용은 다음과 같습니다. 1. 방식 (2)에서 여러개의 패킷이 한 프레임에서 처리되어야 할 때, 패킷들을 메인스레드 해당 프레임에서 하나씩 순서대로 처리하나요? 아니면 Collison Processing과 같은 사례처럼 스레드 풀을 사용하여 병렬로 처리되나요? 2. 만약 병렬로 처리한다면 리소스에 대한 락을 방식 (1)과 비슷하게 걸고 사용해야 할 것 같은데 이해한 내용이 맞을까요? 3. 만약 순차적으로 처리한다면 해당 프레임에서 모두 처리하지 못했을 경우 다음 프레임으로 넘어가는 로직인가요? 궁금증에 남겨봅니다 ㅎㅎ
멀티 플레이어 게임에서 실시간 위치를 나타낼때 개인적으로 어떤 방식을 사용하시는지 궁금합니다. 1. UDP + 데드레커닝 사용 2. TCP + 데드레커닝 사용 3. TCP, 클라 nagle off, 서버 nagle on + 데드레커닝 사용 4. TCP, 클라, 서버 모두 nagle off 5. 혹은 기타 방법.. 경험적인 측면이 적어 영천님 의견을 듣고 싶습니다.
15:01 수동/능동적인 서버 21:14 voxel horizon 서버가 하는 일 29:09 응답성 향상을 위한 주요기법 37:22 비동기처리 - 싱글스레드 42:18 비동기처리 - 멀티스레드 44:31 Thread Pool 49:20 사실 코드최적화에서 제일 중요한 건 simd가 아니다.. 1:03:54 서버 클라이언트 코드 공유 (그림) 1:09:04 서버 작업 스케줄링 (그림) 1:15:23 패킷수신 -> 메세지 처리 1:21:43 이동(충돌) 처리 데모 : 어떤 면을 충돌검사해야하는가? 1:22:59 서버에서의 충돌처리 (동기적인처리 && 처리량 증가 == 스레드풀 처리) 1:27:23 멀티스레드를 해도 30fps 못맞추는데 어떡함? 1:30:56 SMG, 라이플에 대한 판정 1:30:57 로켓런쳐에 대한 판정 1:35:40 클라 서버 복셀지형을 편집하는 흐름 (그림) 1:37:57 2D 비트맵 상에서 x,y축으로 한칸씩 성장 1:40:13 복셀데이터 스트리밍 (데모) 1:49:12 다수의 복셀 오브젝트들을 압축할 때 (그림) 1:53:13 개인맵 로드/세이브 Async I/O Manager (그림) 1:57:14 비동기 DB쿼리 1:59:31 서버의 작업 스케줄링 정리 (그림) 2:03:12 다수의 인스턴스맵 생성 2:04:45 Copy on Write 2:09:21 동기화 객체별 응답시간 (Atomic operation, Custom spin lock, SRWLock, Critical Section, Mutex & Event) 2:26:59 "Write 할때 IO 스레드가 Lock을 걸고 쓰는건가요?"
뭘 해도 2년전 영천님을 넘어설 수는 없군여...잔짜 급이 다른 강의를 복습하면서 상기하는 듯 합니다.. 진짜 늘 감사합니다,,
도움이 되셨다니 기쁘네요.
8:44 부터 시작입니다.
서버개발자 취준생인데 정말 좋은영상 감사합니다! 이런 내용을 무료로 볼수있다니..
도움이 됐으면 좋겠네요.
웹 서버 개발자지만 게임 서버 개발을 도전해보고자 하는 사람입니다. 모든걸 이해할 순 없었지만 어디에 주안점을 두고 개발을 해야되고 뭘 공부해야하는지 로드맵을 제시받은 느낌입니다. 정말 도움 많이됐습니다. 감사합니다.
도움이 되었다니 기쁘네요.
좋은 발표자료 잘 들었습니다. 도움 많이 되었습니다. 정말 감사합니다.
설명하신 패킷처리 과정 중에 하나 궁금한 점이 있습니다.
방식 (1) IOCP를 통해 WorkerThread가 패킷 재조립 후 바로 처리하는 방식
방식 (2) IOCP를 통해 WorkerThread가 패킷내용을 Write Buffer에 기록
=> 하나 이상의 패킷 재조립이 완료 되었을때 Write, Read Buffer 더블버퍼링을 적용 후 MainThread에 통지
=> Read Buffer에 갱신된 내용을 보고 MainThread에서 패킷 처리
일단 이렇게 이해하였습니다.
질문내용은 다음과 같습니다.
1. 방식 (2)에서 여러개의 패킷이 한 프레임에서 처리되어야 할 때, 패킷들을 메인스레드 해당 프레임에서 하나씩 순서대로 처리하나요? 아니면 Collison Processing과 같은 사례처럼 스레드 풀을 사용하여 병렬로 처리되나요?
2. 만약 병렬로 처리한다면 리소스에 대한 락을 방식 (1)과 비슷하게 걸고 사용해야 할 것 같은데 이해한 내용이 맞을까요?
3. 만약 순차적으로 처리한다면 해당 프레임에서 모두 처리하지 못했을 경우 다음 프레임으로 넘어가는 로직인가요?
궁금증에 남겨봅니다 ㅎㅎ
1. 메인스레드가 하나씩 처리합니다. 2. 병렬로 처리하지 않기 때문에 락을 걸지 않습니다. 3.해당 프레임에서 모두 처리됩니다. 다음 프레임으로 넘기는 경우는 없습니다. 다 처리해야하만 front/back버퍼를 스위칭합니다.
@@megayuchi 답변해주셔서 감사합니다 덕분에 궁금증이 풀렸습니다 ㅎㅎ
게임 서버라곤 1도 몰랐는데 영상에서 많은 것들을 얻고 가네요. 올려주셔서 감사합니다!
이거 본다고 바로 따라하거나, 써먹을 수 도 없지만... 적어도 뭘 모르는지 알게됩니다 ㅋㅋㅋㅋㅋ 공짜로 강의 올려주셔서 감사합니다.
도움이 됐으면 좋겠네요.
개발자님의 지식의 축적이 느껴지는 값진 교육 영상이네요
감사합니다.
2:05:08 Copy on Write
멀티 플레이어 게임에서 실시간 위치를 나타낼때 개인적으로 어떤 방식을 사용하시는지 궁금합니다.
1. UDP + 데드레커닝 사용
2. TCP + 데드레커닝 사용
3. TCP, 클라 nagle off, 서버 nagle on + 데드레커닝 사용
4. TCP, 클라, 서버 모두 nagle off
5. 혹은 기타 방법..
경험적인 측면이 적어 영천님 의견을 듣고 싶습니다.
TCP + 데드레커닝 + 클라/서버 nagle off 입니다. 자세한 내용은 github.com/megayuchi/ppt 에서 'MMOG Server-Side 충돌 및 이동처리 설계와 구현' 항목을 참고하세요.
잘 보고있습니다ㅎㅎ
감사합니다.
게임 개발을 실무로 해본 적은 없어서 제가 가져갈 수 있는게 많지 않은 것 같습니다. 그럼에도 불구하고 좋은 내용 감사드립니다.
감사합니다.
도움이 많이 됐습니다. 감사합니다!
도움이 되셨다니 다행입니다.
좋은걸 이제보네요. 블로그글을 본적이 있었는데 유튜브하시는지 몰랐네요.
가끔 방송합니다. 한달에 두번 정도..
정말 잘 정리된 정보 감사합니다!
감사합니다. 도움이 되셨다니 다행입니다.
배워 가는 것이 많군요 잘 봤습니다
감사합니다.
15:01 수동/능동적인 서버
21:14 voxel horizon 서버가 하는 일
29:09 응답성 향상을 위한 주요기법
37:22 비동기처리 - 싱글스레드
42:18 비동기처리 - 멀티스레드
44:31 Thread Pool
49:20 사실 코드최적화에서 제일 중요한 건 simd가 아니다..
1:03:54 서버 클라이언트 코드 공유 (그림)
1:09:04 서버 작업 스케줄링 (그림)
1:15:23 패킷수신 -> 메세지 처리
1:21:43 이동(충돌) 처리 데모 : 어떤 면을 충돌검사해야하는가?
1:22:59 서버에서의 충돌처리
(동기적인처리 && 처리량 증가 == 스레드풀 처리)
1:27:23 멀티스레드를 해도 30fps 못맞추는데 어떡함?
1:30:56 SMG, 라이플에 대한 판정
1:30:57 로켓런쳐에 대한 판정
1:35:40 클라 서버 복셀지형을 편집하는 흐름 (그림)
1:37:57 2D 비트맵 상에서 x,y축으로 한칸씩 성장
1:40:13 복셀데이터 스트리밍 (데모)
1:49:12 다수의 복셀 오브젝트들을 압축할 때 (그림)
1:53:13 개인맵 로드/세이브 Async I/O Manager (그림)
1:57:14 비동기 DB쿼리
1:59:31 서버의 작업 스케줄링 정리 (그림)
2:03:12 다수의 인스턴스맵 생성
2:04:45 Copy on Write
2:09:21 동기화 객체별 응답시간
(Atomic operation, Custom spin lock, SRWLock, Critical Section, Mutex & Event)
2:26:59 "Write 할때 IO 스레드가 Lock을 걸고 쓰는건가요?"
너무 감사히 잘봤습니다 명강의 그자체네요
10년이 지나도 여전히 명강의일듯 합니다.
제마음속 최고의 개발자.
감사합니다.
너무 감사합니다
와 좋은자료 감사합니다! 목소리가 포프님 방송에 나왔던 분 같아요 그분도 stl쓰지말고 데이터 스트럭처는 c로 직접 짜서 쓰라고 하시던대
그 분이 접니다.
@@megayuchi 와우!! 그래픽스 프로그래머 이신줄 알았는대 서버쪽도 엄청난 전문가셨군요.. 게임서버 개발자 준비중인 취준생인대 모르는단어가 좀 있어서 이번영상을 다 이해하지는 못했지만 많이배웠습니다 좋은영상 감사합니다
@@user-wj1me9qc4j 엔진 만들기 전에 원래 서버프로그래머였고 실제 코룸온라인등 서비스했던 게임들이 제 네트워크 코드를 사용했죠.
최곱니다❤
감사합니다.
발표자료는 이쪽입니다.
www.slideshare.net/dgtman/ss-228096175
감사합니다.
아이쿠 감사합니다.
오.. 영천아 좋다.. 아예 DDraw부터 시작해서 엔진 개발 강의하고.. 책도 써 ㅋㅋㅋ 강의에 능력이 있네..
벌써 지쳤음....