본문 바로가기

c#_게임서버8

zone Zone 관리. 브로드 캐스팅을 할 때 맵의 모든 영역의 플레이어에게 정보를 전송하면 문제가 발생한다, 그래서 모든 맵에 대해서 정보를 전송하지 않고, 맵을 격자로 나눠서, 내가 속해 있는 격자내에서 정보를 전송하면 더 효율적으로 관리가 가능하다. 2022. 7. 13.
서버 멀티스레드 버전 멀티스레드 버전은, 클라의 요청이 들어오게된다면 스레드를 하나씩 더 늘리면된다. startClient함수의 thread 부분을 잘 살펴보면 좋다... public void startClient(TcpClient clientSocket) { client = clientSocket; Thread echo_thread = new Thread(echo); echo_thread.Start(); } 출처: https://sosal.kr/761 [so_sal :티스토리] 위에서 클라이언트 요청이 올때마다 thread를 하나씩 만들어서 start해주는 형식이다. 출처 : https://sosal.kr/761 2022. 7. 9.
mmorpg서버구조 mmorpg 서버 웹서버는 요청과 응답이 끝이지만 게임서버는 interaction이 정말 많다.. a가 b에게 공격을 가하면 a는 공격을하고 스태미너가 감소하던가 b의 체력도 감소하게된다 이러한 하나의 연결이 아닌 여러 상호작용들이 존재한다. ! single스레드를 사용하면 안되나? actor 수가 너무 많아지면 하나의 스레드로는 감당을 하지 못한다, 게임 유저들은 참지못한다.! 그래서 사용한 것이 멀티스레딩 구조인데 이 상황에서는 문제가 많다. 중간에 queue로 범퍼 역할을 해도 lock lock을 거는데 여기서 성능도 문제가 되고, .. 그래서 가장 중요한 것이 구역을 잘 나누는 것이다. 구역을 잘 나누면된다. 멀티프로세스는 어떨까 그렇게 되면 lock도 필요없고 동기화고 필요없고 그렇지만. 경계에.. 2022. 7. 6.
spinlock, autoResetEvent, ReaderWriterLock Spinlock 스핀락은 양보하거나 비키지않고 계속 critical section 부근을 맴도는 것이다. c#에서는 spinlock이 모두 구현되어있다. class SpinLock { //volatile bool _locked = false; volatile int _locked = 0; public void Acquire() { //두개의 스레드가 동시에 들어가게된다면 문제가 발생하게 된다. // lock을 잠그고 푸는 것을 하나의 동작으로 이루어지게 해야한다. 별도의 동작이된다면 문제가 발생한다. //while(_locked) //{ // // 잠김이 풀리길 원한다. //} //_locked = true; //while(true) //{ // int original = Interlocked.Excha.. 2022. 7. 2.