inflearn logo
강의

講義

知識共有

[C#とUnityで作るMMORPGゲーム開発シリーズ] Part9:MMOコンテンツ実装(DB連動 + 大型構造 + ライブ準備)

HP連動#2

이해한 것이 맞나 궁금합니다.

287

bae5445

投稿した質問数 15

0

플레이어가 disconnected될 때 게임룸에서 Push를 하여 LeaveGame을 예약을 했었는데요.

 

현재 JobSerializer를 상속하는게 DbTransaction과 GameRoom 두 개가 있는데 쉽게 두 개의 쓰레드가 있다고 생각하면 되는지 모르겠습니다.

 

하나의 게임룸에서 일감이

- 플레이어A의 LeaveGame

- 플레이어B의 전투

- 플레이어C의 전투

...

이렇게 쌓여있을 때 플레이어A가 나갔을 때 현재 상태를 DB에 저장한다고 하면 I/O를 처리하는데 시간을 많이 잡아먹으면 플레이어B와 C의 전투 처리 코드가 지연이 되기 때문에, DbTransaction 쓰레드로 DB 일감을 Push하여 거의 같은 시각에 봤을 때 플레이어B의 전투와 플레이어A의 DB 갱신 로직이 처리될 수 있다고 이해했는데 이렇게 생각하면 될까요?

 

세 지점에 브레이크 포인트를 찍어서 쓰레드를 관찰해봤는데 위에서 차례대로 24132 -> 주쓰레드 -> 9440 이렇게 변화가 있었는데요. 전부 Push로 예약을 하는 입장에서 왜 DbTransaction에 Push한 일감만 주쓰레드에서 처리하는지도 궁금합니다.

MMORPG

回答 1

0

Rookiss

이렇게 쌓여있을 때 플레이어A가 나갔을 때 현재 상태를 DB에 저장한다고 하면 I/O를 처리하는데 시간을 많이 잡아먹으면 플레이어B와 C의 전투 처리 코드가 지연이 되기 때문에, DbTransaction 쓰레드로 DB 일감을 Push하여 거의 같은 시각에 봤을 때 플레이어B의 전투와 플레이어A의 DB 갱신 로직이 처리될 수 있다고 이해했는데 이렇게 생각하면 될까요?

네 맞습니다!

세 지점에 브레이크 포인트를 찍어서 쓰레드를 관찰해봤는데 위에서 차례대로 24132 -> 주쓰레드 -> 9440 이렇게 변화가 있었는데요. 전부 Push로 예약을 하는 입장에서 왜 DbTransaction에 Push한 일감만 주쓰레드에서 처리하는지도 궁금합니다.

꼭 주 스레드에서 처리할 필요는 없구요.
새로운 쓰레드를 만들어서 DB 업무를 맡겨도 동일합니다.
단순히 주 스레드가 딱히 할 일이 없으니 그거라도 시킨(?) 것이죠.

마우스 이벤트 처리방법(오브젝트간 인터렉션)

0

623

1

RecvArgs_Completed에서 lock을 안하는 이유

0

517

1

Entity framework 질문드립니다.

0

576

2

json 직렬화

1

289

1

mmo 와 pvp

0

536

2

github로 프로젝트를 push, pull할 때 질문

1

530

1

Iocp 서버 관련 질문드립니다.

0

329

1

서버 관련 질문

0

397

1

DB 처리관련 질문이 있습니다

0

302

1

안녕하세요. 질문드립니다.

1

1509

2

마이그레이션 파일이 이상합니다.

0

283

1

강의 마지막으로 질문 드립니다.

0

679

2

ItemDbId,구조 설계

0

265

1

MMO 서버 관리 질문 드립니다!

0

323

1

디비 정보 나누기

0

241

1

AccountDb 업데이트

0

308

1

콘솔창이 아니라 브라우저에서 실행

0

282

2

메모리 누수문제.

0

497

1

유니티에서 클라이언트 빌드후 실행하면 맵 로드가 안됩니다.

0

364

1

외부 네트워크에서도 접속해서 게임하기

1

339

1

유니티클라에서 패킷을 계속 보내지 않고 lockstep이나 추측항법으로 동기화를 할 수 있을까요?

0

597

1

서버 메모리와 DB 저장 관련 질문

0

370

1

JsonUtility.FromJson 관해서 질문있습니다.

0

279

1

DB 쓰레드 질문입니다

0

269

1