728x90
소켓이란?
랜선 소켓(콘센트)이 있고 그 소켓에 랜선을 연결해서 정보나 데이터를 주고받는 것
소켓 프로그래밍이란?
- 데이터 read / write 를 하는 IO Process다.
read / write는 크게 두 가지 방식으로 동기와 비동기 방식이 있다.
동기 방식
- 데이터를 read()하면 데이터가 올 떄까지 다른 동작을 하지 않고 읽기 위해 대기한다.
- 게임 서버에서는 여러 커넥션을 동시에 핸들링하기 때문에 하나의 데이터가 올 때까지 서버가 멈춰있으면 안된다.
-> 그래서 read만 보내고 다른 작업을 처리하는 방식인 비동기 방식이 필요하다.
비동기 방식
- read()를 요청했으면 데이터가 오든 안오든 요청만 걸어놓고 다른 일하러 간다.
다른 일하러 갔다와서 read()의 응답이 왔으면 그걸 처리한다.
비동기 방식은 크게 두 가지로 select, windows iocp, linux는 epoll이 있다.
1. select
- pre request 방식
- 자리가 비었는지 매번 확인하면서 비어 있어서 쓸 수 있으면 그때 가서 쓰는 방식
- 일의 주체는 나인데, 내가 이 일을 할 수 있는지 없는지 계속 확인하는 방식
- 구현이 간단
예를 들어 공중 전화기가 있고, 이걸 쓰고 싶은 사람이 여러 명 있다.
이들은 공중전화기를 계속 바라보고 있다. 다른 일을 처리하다가도 계속 공중전화기를 보고 언제 쓸 수 있나 확인한다.
이렇게 계속 확인하면서 다른 일 하다가 쳐다보고 다른 일 하다가 쳐다보다가 마침 공중전화기가 비어있으면 딱 들어가서 쓰는 방식이다.
2. iocp
- post request 방식
- 일의 주체가 내가 아니다. 다른 애(os)가 나를 위해 일을 해준다.
나는 다른 애(os)한테 일을 맡겨놓고 딴 일 보러 간다. - 구현이 select보다 복잡하다.
- window에서는 iocp가 성능이 잘 나온다.
- 다른 애는 일을 한 다음에 나한테 그냥 일의 결과를 쌓아놓는다. ( 큐에 쌓아놓음 )
나는 나중에 와서 큐에 일의 결과가 쌓여있나 확인한다.
택배를 보내고 싶은데 우체국에 담당 직원이 있고, 나는 택배가 오면 내 바구니에 넣어 달라고 요청한다.
이 택배가 올 때까지 기다리지 않고 나는 직원에게 부탁하고 다른 일 보러 간다.
다른 일 보고 와서 내 바구니에 택배가 와 있으면 그걸 가져간다.
select vs iocp
커넥션 수가 100개가 넘어가면 iocp를 쓰는 게 좋고, 100개가 안 넘으면 select도 사용해도 괜찮다.
최근 golang, java, .net에서는 라이브러리에서 네트워킹 기능을 잘 지원하기 때문에 내부적으로 iocp를 썼는지, select를 썼는지 잘 몰라도 코딩하는데는 문제 없이 짤 수 있다.
'게임 서버 > 게임 네트워킹의 이해' 카테고리의 다른 글
게임 네트워킹의 이해5 - MMORPG 서버 구조 (2) | 2024.09.10 |
---|---|
게임 네트워킹의 이해3 - 받은 데이터 활용 방식 (2) | 2024.09.08 |
게임 네트워킹의 이해2 - TCP/UDP 프로토콜 (1) | 2024.09.07 |
게임 네트워킹의 이해 - 1 네트워킹이란? (0) | 2024.09.07 |