ThreadThreadPoolthread를 완전히 새로 만드는 것은 오버헤드가 상대적으로 크기 때문에threadpool을 이용하여 백그라운드에서 돌아가는 스레드를 유동적으로 사용할 수 있음단 thread는 새로 만들 수 있는 스레드의 수가 상대적으로 크다.threadp
관련 없는 변수들을 사용할 때 최적화에 의해 코드 순서가 바뀔 수 있음=> result1과 result2가 모두 0일 수 있음이를 MemoryBarrier 함수를 통하여 억제메모리 배리어코드 재배치 억제메모리 갱신(가시성)full memory barrierASM: MF
레이스 컨디션 문제를 해결하기 위하여 사용interlocked주로 정수형 데이터를 수정할 때 사용MonitorEnter와 Exit의 짝을 항상 맞춰야 함TryEnter 함수로 일정 시간동안 lock을 시도하는 함수를 사용할 수 있음LockMonitor와 같지만 Ente
전역 메모리 상에 스레드만의 로컬 메모리 영역을 만들어 사용특정 lock에 스레드가 몰릴 시 락에 한번 접근 할 때 데이터를 미리 많이 저장해두는 용 등으로 사용 가능ThreadLocal 생성 시 초기값을 설정하는 함수를 넣어서 사용할 수 있음
DNS 사용bind, listencloseacceptconnectsendreceive
initialize\_onAcceptHandler에는 실제 accept 발생 시 액션을 등록하여 해당 콜백을 통해 소켓을 전달SocketAsyncEventArgs는 async 이벤트 시 인자로 넘겨지며 계속 사용됨args.Completed에 accept 시 발생시킬 콜
분산 서버 환경에서는 서버가 다른 서버로 접속할 필요가 있을 수 있음SocketAsyncEventArgs의 UserToken에 소켓을 저장해두고 사용멤버 변수로 만들어 사용할 수 있지만 여러 서버에 접속해야할 경우가 있을 수 있음listner와 마찬가지로 session
세션에서 ReceiveAsync 시 사용하는 버퍼를 효율적, 지속적으로 사용 하기 위해 구현생성자에서 크기를 입력받아 해당 크기만큼 버퍼를 가지는 ArraySegment를 생성세션은 데이터를 받으면 OnWrite를 하여 writePos를 변경시키고,데이터를 읽어서 사용
세션이 SendAsync를 할 때마다 버퍼를 생성하는 것이 아니라미리 만들어 둔 큰 버퍼에 데이터를 쓰고 해당 데이터만큼을 사용할 수 있도록하는 클래스생성 시 버퍼의 크기를 받아 버퍼를 만들어 둔다.세션은 Open을 통해 미리 예상되는 데이터의 크기보다 크게 버퍼를 가
initializelistner가 보내준 소켓을 저장하여 사용receiver가 사용할 이벤트 변수와sender가 사용할 이벤트 변수를 나눠서 사용receiverreceiver는 lisnter와 마찬가지로 ReceiveAsync를 실행 후 이벤트가 완료되거나 pendin
패킷은 당연하지만 데이터 크기가 작을 수록 좋음=> 같은 장소에 사람이 많을수록 똑같은 패킷을 여러번 보내야하기 때문에 작은 차이가 큰 차이를 만들어 냄패킷에는 가변적 데이터가 들어갈 수 있기 때문에 매번 크기가 달라질 수 있고,그렇기 때문에 주로 패킷 맨 앞에 패킷의
tcp와 udp는 4계층인 트랜스포트 레이어의 프로토콜임tcp송신과 수신 측이 연결을 구축하고 통신함전송 순서가 보장됨패킷 손실 시 재전송네트워크가 혼잡할 시 패킷을 일부만 보내는 등의 흐름, 혼잡 제어 가능위와 같은 특징들로 인해 udp와 비교하여 속도가 상대적으로
패킷을 만들어 보내기 위해 데이터들을 바이트 단위로 만들어 내는 과정read패킷을 받은 후 저장된 버퍼를 가지고 데이터 순서 및 크기대로 파싱string과 같은 가변적 데이터는 데이터의 byte 길이를 먼저 받아 해당 길이만큼을 파싱list같은 컨테이너는 데이터의 수를
동일한 인터페이스를 갖는 패킷과 해당 패킷의 처리 함수들을 자동으로 생성하는 프로그램xml이나 json 파일에 패킷의 데이터 구조를 정의해 두고해당 파일을 파싱하여 생성 시작함c클라이언트 단에서 송신하는 패킷은 "C", 서버 단에서 송신하는 패킷은 "S"를 접두사를 가
클라이언트가 서버로 접속하면 서버는 해당 세션을 특정 게임 룸에 입장 시킴 클라이언트가 서버로 메세지를 보내면 서버는 해당 게임 룸에 접속한 클라이언트 모두에게 해당 메세지를 보냄 클라이언트에게 메세지를 받자마자 서버에서 바로 게임 룸의 세션 목록 데이터에 락을 걸

서버에서 사용하던 더미 클라이언트 코드를 유니티에 넣었을 때,유니티 정책 및 유니티, CBitConverter.TryWriteBytes(), Span, ReadOnlySpan 등등...=> 해당 부분들을 다른 방법을 찾아 대체해야 함또한 유니티에서는 메인 스레드를 제외