목록메모 (12)
Coding Memo
ReadWriteLock의 특징은 다음과 같다.1. Spinlock으로 구현2. unsigned int 값의 flag를 하나 지정하여, 상위 2바이트는 write중인 thread_id, 하위 2바이트는 현재 read중인 스레드의 수를 나타냄3. thread_id는 thread가 새로 시작할 때 id 부여4. write 중일 때는 다른 스레드들이 이 lock을 얻지 못함5. wrtie 중이 아닐 때는 다수의 스레드가 동시에 read 가능6. EMPTY_FLAG (어느 스레드도 lock을 가지고 있지 않을 경우)는 0x00000000 서버-클라이언트의 연결에서 가끔씩 패킷을 전송 할 때, 세션의 전송 함수 내의 WRITE_LOCK에서 spin-timeout이 나타났다. 즉, deadlock이다. 이번 문제의..
문제 상황은 내 개인적인 상황에 해당한다. 엄청 복잡한 문제는 아니지만, 같은 문제를 발생시키는 일이 없도록 기록하려고 작성했다. (계속 추가...) ConnectEx - WSAEINVAL (10022) 에러 내용: ConnectEx를 호출할 소켓이 바인딩 되어 있지 않거나 수신 대기 중일 때 발생 문제 상황: ConnectEx 호출 시 발생한 에러 에러 이유: ConnectEx의 첫번째 인자인 소켓이 bind되어 있지 않은 소켓이어서 나타난 에러 해결: ::bind()를 통해 소켓에 로컬 주소와 포트를 바인딩 해준 후, ConnectEx함수를 호출했음 참고: https://learn.microsoft.com/ko-kr/windows/win32/api/mswsock/nc-mswsock-lpfn_conne..
Summary 1. 소켓이 listening 상태에서 Accept를 하지 않고 backlog도 여유가 있을 경우에 클라이언트에서 이 소켓에 Connect를 하게 된다면 실제로 연결이 되지 않았지만(Accept 되지 않았지만) 클라이언트에서는 Connect에 성공한 것으로 간주될 수 있다. 따라서 이 때, connect에 관련한 IO callback이 호출될 수 있고, SocketError 값 또한, Success로 받아들인다. 위 상황에서 서버는 실제로 Accept를 한 상태가 아니기 때문에 서버에서는 Connected로 간주되지 않는다. (다시 말하자면, accept를 하지 않고 있기 때문에 backlog(대기열)에만 연결 시도한 소켓이 추가되었을뿐 서버는 이 상태를 연결상태로 받아들이질 않는다.) 2..
- Unity에서의 비동기 작업은 주로 Unity의 메인스레드에 처리 Addressable에서 여러개의 비동기 작업을 실행 후, 완료를 확인하고 싶을 때 Interlocked등의 atomic하게 연산을 할 필요가 없다. Thread-safe 이다. - 외부 라이브러리의 스레드에서는 UnityObject를 컨트롤 할 수 없을 뿐더러, Coroutine도 실행 시킬 수 없음 예를 들어 Socket에서 데이터를 받고 이를 바로 해당 스레드에서 처리하려고 하여, UnityObject를 건드린다면 어떠한 동작도 실행하지 않거나 오류가 날 것이다. 또한 Coroutine도 마찬가지이다. - Addressables.LoadResourceLocationsAsync() 의 첫번째 인자로, Addressable에 등록되어..
문제 서버 코어를 만들고 빌드를 하여 dll 파일을 생성했다. 이 dll 파일을 Unity에서 그대로 사용하려고 넣어서 컴파일을 했다. 물론 문제가 없었다. 하지만, 서버 코어에 있는 추상 클래스를 상속받아서 클래스를 하나 작성하려고 했는데 참 보기에는 어이없는 에러가 나타났다. CS0115: 재정의할 적절한 메서드를 찾을 수 없습니다. CS0534: 상속된 추상 맴버를 구현하지 않습니다. CS0115는 override 키워드가 적절하게 사용되지 않았을 때 (재정의할 메서드를 찾지 못했을 때) 나타나는 오류이고, CS0534는 추상 클래스를 상속 받았을 때, 반드시 구현해야 하는 맴버를 구현하지 않았을 때 나타나는 에러이다. 그래서 내가 구현을 안했을까? 난 구현했는데 계속 에러가 나타난다! 좀 더 간단..
몇몇 게임을 하다보면, 그리고 게임을 만들려고하면 튜토리얼은 어떻게 구현하는 것일까에 대해 고민을 하게 된다. 내가 생각해낸 2가지 방법은 1. 튜토리얼 레벨을 완전히 따로 제작 2. 실제로 게임 플레이에 사용되는 실제 레벨에서 게임 진행 로직 일부 변경 및 튜토리얼용 UI 사용 이렇다. 3. (추가적으로) 게임 방법에 대한 튜토리얼을 따로 제작하지 않고 (간단한 게임의 경우) 게임 방법을 이미지로만 보여주는 방법(설명서 처럼?) 1번 방법은 특정 레벨이 복잡하거나 규모가 크게 구현이 되어있으면 조금 까다로울 수도 있다. 물론, 기존 레벨을 그대로 복사를 해놓고 일부만 변경해서 사용하는 방법도 있을 것이다. 아니면 게임을 즐기기 전에 매우 간단한 튜토리얼 레벨을 제작해도 될 것같다. 2번 방법은 다른 방..
보호되어 있는 글입니다.
로그인 서버를 구현하는데 문득 mariadb 접속과 쿼리를 위한 모듈을 따로 두고 싶다는 생각이 들어서 query 관련 함수를 만들려 그랬다. 그러나 mysql 모듈의 query 함수는 sync(동기)적이라 다른 함수에서 호출하여 결과값을 반환 해줄 수가 없었다. (다른 방법이 있나????????.... ) 무턱대고 async 함수로 실행해 보았는데 ㅋㅋ - 에러 구글링을 한 결과 mysql 도 async으로 호출할 수 있다는 것을 알았다. https://surprisecomputer.tistory.com/31 [Node.js] mysql을 async/await로 처리하기 1. 서론 node.js 에서 콜백 지옥을 피하기 위해서는 Promise 또는 async/await를 써야 한다. 이때 Promise..