728x90

게임서버 36

24.10.14 게임 서버

최흥배님의최흥배 C++ 네트워크 프로그래밍 분석&리팩토링 - GameProject3Re 를 보고 코드를 분석하고, 리팩토링을 진행한다.게임서버트러블 슈팅. 1실행을 시키는데 오류가 뜬다. ? load error servercfg.ini 를 못 읽어오는 것 같다.???파일이 존재한다.코드 관련 문제가 있을 것 같다.이곳에서 return false;경로를 절대 경로로 지정해주어서 문제를 해결했다.왜 문제가 발생했는지 상대경로를 확인해보아서 문제가 어디서 발생했는지 확인했다.파일의 경로는 …/…/EchoServer/파일.ini 이러했는데, 상대 경로가 …/…/EchoServer/x64/Debug 였다. 절대 경로에서 다시 상대경로로 바꿔주고 ServerCfg.ini 파일을 옮겨줘서 문제를 해결했다.INITma..

24.10.11 게임 서버

게임서버실시간 게임 최적화 전략수동적인 서버결과만 저장해주는 서버패킷 중계능동적인 서버 - 일반적인 게임서버생태를 서버의 메모리에 저장하고 있다.DB는 보조 수단이다.클라이언트의 시간 차 0을 목표로 한다.(불가능 하지만)게임 루프가 있다.서버가 하는 일 in Voxel Horizon유저로부터의 패킷에 의한 이벤트처리플레이어 or NPC에 대한 이동처리처리량과 응답성의 차이어느 부분이 문제인지 생각할 필요가 있다.응답성 향상을 위한 주요 기법비동기 처리특정 작업 때문에 전체 응답성이 떨어지는 상황을 방지멀티 스레드 - 별도의 worker thread가 처리싱글 스레드 - 작업을 쪼개서 원래의 작업 스레드에서 여러번에 걸쳐서 처리thread pool을 이용한 병렬처리서로 의존성을 가지지 않는 n개의 항목에..

24.10.10 게임서버

게임 서버게임 서버를 C++로 만들어보고 있다.저번에 만들어 본 서버를 토대로 만들다가 너무 지저분하게 코드를 쓰고 있어서 다시 자료를 찾고 재시작중이다. 어렵지만 해야디..해야디.. 게임 서버하고 언리얼, 언리얼 데디서버까지 봐야해서 쉽지는 않을것같다. 그래도 고다고C++로 게임 서버를 개발할 때는, 클라이언트와 서버 간의 네트워크 통신을 처리하고, 게임의 상태를 서버에서 관리한다. 서버는 클라이언트의 요청을 받고, 게임 로직을 처리한 후, 그 결과를 다시 클라이언트에 전달한다. 서버는 게임의 중요한 상태를 유지하고, 여러 클라이언트 간에 동기화를 책임진다.소켓(Socket)과 통신C++ 서버는 소켓(Socket)을 이용해 클라이언트와 통신한다. 소켓은 네트워크를 통해 데이터를 주고받을 수 있는 일종의..

24.08.02 C#, DEV

24.08.02 C#, DEVC#System.Data.SqlClient.SqlConnection.OnErrorADO.NET의 SqlConnection 클래스에서 발생한 오류를 처리하기 위한 내부 메서드이다.이 메서드는 SQL 서버와의 연결 중 오류가 발생했을 때 호출된다. 특히 OnError 메서드는 데이터베이스 작업 중 발생한 예외(SqlException)를 처리하고, 필요시 연결을 중단하거나 다른 후속 작업을 처리할 수 있도록 하는 역할을 한다.이 메서드는 SqlConnection 클래스의 내부 메서드이므로 직접 호출하거나 오버라이드할 수는 없다. 주로 SqlConnection 객체와 관련된 예외 처리 흐름의 일부로 사용되며, 개발자가 직접적으로 사용하는 경우는 드물다. 예외가 발생했을 때의 로그 또..

24.07.30 C#, 배치 파일과 도스 명령어, 게임 서버

C#TryGetValue 메서드에서 Dictionary와 Tuple 함께 사용TryGetValue 메서드Dictionary 클래스의 메서드로, 키를 사용해 값을 안전하게 가져오려 할 때 사용한다.형식 : dictionary.TryGetValue(key, out value)((a,b) out c) 매개변수(a, b): 키(key)로 사용되는 튜플이다.out c: 찾은 값을 저장할 변수이다.장점복합 키를 사용할 수 있어 다차원 데이터를 효율적으로 표현할 수 있다.튜플을 사용함으로써 코드가 더 명확해질 수 있다.주의사항튜플을 키로 사용할 때는 모든 요소가 정확히 일치해야 한다.성능을 고려해야 할 경우, 복잡한 튜플 키의 사용은 주의가 필요할 수 있다.String.IsNullOrWhiteSpace(String)..

나만무 슬레이어즈 14

나만무두 브랜치에서 각각 서로 다른 인스턴스의 서버로 배포되도록 시스템을 구축했다.appspec.yml이 아닌 다른 이름으로 배포하면 appspec.yml을 찾지 못해 codedeploy에서 배포 실패가 됐다.여러 시도 끝에 아래와 같은 방법을 찾았다.appspec-auth.yml 을 빌드하는 순간 appspec.yml 라는 이름으로 동적 생성해 해결함name: Rename appspec filerun: mv ./appspec-auth.yml ./appspec.ymlGoogle OAuth 로그인 구현nuget을 이용해서 라이브러리를 다운 받아서 구현했다.로그인을 성공했을 때 오브젝트 setactive를 통해 화면 전환을 구현했다.로그인이 성공하면 서버에 email을 보내고 서버는 클라이언트에게 유저의 i..

Study/Project 2024.05.12

24.05.08 나만무

나만무트러블슈팅socket.io를 유니티 클라이언트와 연결하지 못 하고 있었다.처음에 app.listen을 사용해 서버를 열었다. 그러나 예제를 그대로 따라했음에도 유니티 클라이언트와 연결이 불가능했다.클라이언트의 문제 일 것이라고 생각을 하고, 여러 코드를 다 사용해봤지만 연결이 계속 되지 않았다. 그래서 서버와 클라이언트 둘 다 다른 사람의 깃을 복사해서 사용해보니 되는 것을 확인해서 하나씩 바꿔서 문제를 찾아보기 시작했다.app.listen()의 경우 Express 애플리케이션을 시작하는 메서드로서, HTTP 서버를 직접 생성하고 실행한다. 하지만 Socket.IO를 사용할 때는 http.createServer()로 생성한 HTTP 서버 인스턴스를 사용하여 Socket.IO 서버를 초기화 했어야 했..

나만무 슬레이어즈 10

나만무위치동기화어제 위치 동기화가 안되던 문제를 아침에 다시 보았다.위치를 이상하게 받아오고 이상하게 보간 해주고 있었다.Player의 위치를 확인해주었다. Player의 경우 Player의 객체가 움직이는게 아니라 Sled라고 하는 객체의 위치를 받아오게 하고 있었는데, 이 움직임이 잘 들어가고 잘 바뀌는지 확인을 해주었다.Sled의 위치를 옴겨주었음에도 다시 원 값으로 돌아오는 현상을 발견할 수 있었다.팀원과 이야기를 해보니 collider의 위치가 변경되고, sled model은 그 collider에 붙어 있다는 것을 알 수 있었다.collider의 위치로 위치 동기화를 진행함에 따라 문제를 해결할 수 있었다.yield return null → continuereturn null을 하면 한 프레임을..

Study/Project 2024.05.08

24.05.06 나만무

나만무위치동기화어제 위치 동기화가 안되던 문제를 아침에 다시 보았다.위치를 이상하게 받아오고 이상하게 보간 해주고 있었다.Player의 위치를 확인해주었다. Player의 경우 Player의 객체가 움직이는게 아니라 Sled라고 하는 객체의 위치를 받아오게 하고 있었는데, 이 움직임이 잘 들어가고 잘 바뀌는지 확인을 해주었다.Sled의 위치를 옴겨주었음에도 다시 원 값으로 돌아오는 현상을 발견할 수 있었다.팀원과 이야기를 해보니 collider의 위치가 변경되고, sled model은 그 collider에 붙어 있다는 것을 알 수 있었다.collider의 위치로 위치 동기화를 진행함에 따라 문제를 해결할 수 있었다.yield return null → continuereturn null을 하면 한 프레임을..

728x90