Session
소켓 프로그래밍에서 "세션(session)"은 일반적으로 클라이언트와 서버 간의 연결을 나타내는 개념입니다. 세션은 주로 다음과 같은 역할과 특성을 갖습니다:
- 연결 상태 관리: 세션은 클라이언트와 서버 간의 연결 상태를 추적합니다. 이를 통해 양측은 연결이 유지되고 있는지, 연결이 끊어졌는지 등을 알 수 있습니다.
- 데이터 전송 관리: 세션은 클라이언트와 서버 간의 데이터 전송을 관리합니다. 여기에는 송수신 버퍼, 전송 큐, 데이터 패킷 등의 관리가 포함됩니다.
- 고유 식별자: 각 세션은 일반적으로 고유 식별자를 가집니다. 이를 통해 서버는 여러 클라이언트와의 세션을 구분할 수 있습니다.
- 상태 정보 저장: 세션은 클라이언트의 상태 정보를 저장할 수 있습니다. 예를 들어, 로그인 상태, 사용자 권한, 진행 중인 작업 등 클라이언트와 관련된 정보를 세션에 저장할 수 있습니다.
- 리소스 관리: 세션은 연결된 클라이언트에 할당된 리소스를 관리합니다. 이는 메모리, 파일 핸들, 네트워크 소켓 등 다양한 리소스를 포함할 수 있습니다.
클라이언트 하나당 세션 하나가 존재해야 하는가?
일반적으로 클라이언트 하나당 세션 하나씩 존재해야 합니다. 세션은 클라이언트와 서버 간의 연결을 나타내며, 각 세션은 개별 클라이언트의 연결 상태, 데이터 전송, 상태 정보를 관리합니다. 이를 통해 여러 클라이언트와의 통신을 효율적으로 처리할 수 있습니다.
클라이언트와 세션의 관계
- 독립된 연결 관리: 각 클라이언트는 독립적인 연결을 유지하며, 세션을 통해 서버와 데이터를 주고받습니다. 각 세션은 해당 클라이언트의 연결 상태와 데이터를 관리합니다.
- 고유 식별자: 각 세션은 고유 식별자를 가져서, 서버는 세션을 통해 여러 클라이언트를 구분하고 적절히 대응할 수 있습니다.
- 리소스 격리: 각 세션은 독립적인 리소스(버퍼, 네트워크 소켓 등)를 관리하므로, 한 클라이언트의 문제가 다른 클라이언트에 영향을 주지 않도록 할 수 있습니다.
- 상태 유지: 세션은 클라이언트의 상태 정보를 유지할 수 있어, 연결 동안 상태 정보를 추적하고 처리할 수 있습니다.

이런식의 AsyncEventArgs 를 넣어준 경우 그에대한 콜백 함수는 별도의 스레드에서 실행
→ 스레드 풀에서 알아서 관리해줌