SOCKET(2)
-
[게임서버프로그래밍#5] 멀티스레드 Client-Server 구현 (feat: mutex, chrono)
이 글에서는 서버가 여러 클라이언트의 요청을 동시에 처리하기 위해 멀티스레드를 사용하는 방법을 설명한다. 멀티스레드 환경에서 발생하는 자원 충돌 문제를 막기 위해 mutex(뮤텍스)를 사용하고, 통신 타임아웃 처리를 위해 chrono를 적용하는 방법도 함께 다룬다. 멀티스레드가 필요한 이유하나의 서버 소켓이 다수 클라이언트와 통신할 때, 동시 접속 요청을 처리하려면 스레드가 필요하다.스레드를 사용하지 않으면 하나의 클라이언트 처리가 끝날 때까지 다른 클라이언트는 대기해야 한다. Thread 기본 개념스레드는 하나의 프로세스 안에서 독립적으로 실행되는 흐름이다.스레드들은 Heap 영역, 전역 변수, 파일 핸들 등을 공유한다.문제점:자원을 공유하기 때문에 여러 스레드가 동시에 같은 데이터에 ..
2024.06.02 -
Socket의 기본 정리 ( feat, Blocking / Non-Blocking )
소켓소켓의 경우 파일 핸들작업과 유사파일 핸들 : 파일의 읽고/쓰기를 조작하기 위한 컨트롤소켓 핸들 : 네트워크 연결을 조작하기 위한 컨트롤소켓의 경우 비동기 처리가 주로 사용됨비동기처리의 필요성동기처리일경우, 해당 소켓의 통신과정 동안 사용자 입장에서는 Main 함수가 정지되어있음 (다른 일을 처리하지 못해 멈춰있는것처럼 보임)비동기 방식논블로킹 소켓Overlapped I/Oepoll (linux)I/O Completion Port (IOCP / Window) Blocking 통신 구조클라이언트sock_handle = socket(TCP)sock_handle.bind(any_port)sock_handle.connect(server_ip:port)sock_handle.send()sock_handle.c..
2024.05.30