Server programming61 05_03_유니티와 서버 연동 방법 #4 개요 플레이어의 이동을 서버에 보내는 코드, 클라이언트에서 플레이어를 제어하는 코드, 그리고 서버에서 클라이언트로 데이터를 전송하는 방법을 보여줍니다. 특히 이 예제에서는 네트워크를 통해 플레이어의 위치를 업데이트하고, 여러 플레이어가 게임에서 움직일 수 있도록 만드는 방법에 대해 설명하고 있습니다. 또한, 클라이언트는 서버로부터 플레이어 리스트를 받아오고, 이를 기반으로 새로운 플레이어를 생성하거나 기존 플레이어를 업데이트합니다. 마지막으로, 이 예제는 다수의 플레이어(500개까지)를 동시에 처리할 수 있음을 보여줍니다. 이를 통해 Unity와 C#을 사용하여 대규모 멀티플레이어 게임을 개발할 수 있음을 알 수 있습니다. 1.유니티 작업에 들어가기 전에 1_1. 로그 안보이게 Server의 Packet.. Server programming 2023. 5. 23. 05_03_유니티와 서버 연동 방법 #3 개요 MMO 게임 서버와 클라이언트 간 통신 프로토콜을 만드는 과정을 간략하게 설명하고 있습니다. 유니티 기반 클라이언트와 C#으로 작성된 서버 간 통신을 위해 필요한 패킷 형식을 XML을 통해 정의하고, 이를 처리하는 로직을 서버와 클라이언트에 추가하는 방식입니다. 중요한 부분은 다음과 같습니다: 1. 패킷 정의: XML 파일을 통해 각 패킷의 형식을 정의합니다. 패킷에는 플레이어의 입장 및 퇴장, 플레이어의 이동 등에 대한 정보가 포함됩니다. 이 정보는 서버와 클라이언트 모두가 이해할 수 있는 형식으로 작성되어야 합니다. 2. 패킷 처리: 서버와 클라이언트 모두 각 패킷을 처리하는 로직을 구현합니다. 이 로직에는 패킷을 받아서 적절한 작업을 수행하거나, 필요한 정보를 패킷으로 만들어 보내는 작업이 포.. Server programming 2023. 5. 21. 05_02_유니티와 서버 연동 방법#2 개요 유니티 클라이언트의 S_ChatHandler에서 뭔가 추가적인 액션을 하게 수정해봅니다. 플레이어를 찾아서 움직이거나 스킬을 쓰게 하기 위한 첫 걸음으로 유니티가 Player를 찾는 기능을 구현해 봅니다. 유니티가 인식하는 메인 스레드에서 명령이 실행되어야 하므로 패킷을 만드는 것과 핸들링 하는 것을 분리합니다. 패킷을 만들어 큐에 넣어 둔 다음에, 핸들링 하는 건 유니티에서 만든 스크립트에서 실행하게 합니다. 수정된 내용이 적용되어 코드가 자동 생성되게 PacketGenerator를 업데이트 합니다. 패킷을 받는 것 뿐만 아니라 보내는 것도 합니다. 1.유니티가 Player 찾게 하기 1_1. 시도 유니티로 돌아가 실린더를 만들고 이름은 Player로 한다. 유니티 Client의 PacketHan.. Server programming 2023. 5. 18. 05_01_유니티 연동_유니티 연동#1 개요: 유니티와 서버를 연동 시켜 볼 것이다. 이 내용은 유니티와 서버를 연동하는 방법에 대한 상세한 가이드입니다. 코드 재사용성에 대한 좋은 소식과 일부 재사용 불가능성에 대한 나쁜 소식을 제공하며, Unity 프로젝트 설정, 서버 코드 이동, 에러 수정, 그리고 유니티에서의 테스트 방법에 대한 지침을 제공합니다. 유니티 설정: Unity 프로젝트를 생성하고, Assets에 "Scripts"라는 새 폴더를 만듭니다. 서버의 기존 코드를 가져와 필요한 부분을 선택합니다. ServerCore의 다양한 클래스 파일들을 유니티의 Scripts 폴더에 복사 붙여넣기 합니다. DummyClient의 ServerSession 및 Packet 폴더를 Scripts에 복사 붙여넣기 합니다. 사용하지 않는 클래스를 삭제.. Server programming 2023. 5. 17. 04_07_Job Queue_JobTimer 개요 이 문서는 서버 프로그래밍에서 시간 관리를 효율적으로 할 수 있는 방법에 대해 설명하고 있습니다. 주로 게임 서버에서 여러 객체가 동작해야 하는 경우를 대상으로 이야기하고 있으며, 이를 위한 두 가지 접근 방식을 제시하고 있습니다. 1. Tick을 이용하는 방법: 가장 간단한 방법으로, 주기적인 시간 간격으로 객체의 동작을 갱신하는 방식입니다. 이 방식의 장점은 간단하고, 멀티스레드에 대한 복잡한 이해 없이도 쉽게 사용할 수 있다는 것입니다. 그러나, 서버에 여러 객체가 존재하고 각 객체마다 갱신 타이밍이 다른 경우 while 문 안에 모든 로직을 넣어야 하므로 복잡해질 수 있습니다. 2. 예약 시스템을 이용하는 방법: 더욱 세련된 방법으로, PriorityQueue를 이용한 예약 시스템을 제안합니.. Server programming 2023. 5. 17. 04_06_Job Queue_패킷 모아 보내기 패킷 모아 보내기는 컴퓨터 네트워킹에서 여러 패킷을 모아 하나의 패킷으로 보내는 방법입니다. 이 과정은 많은 작은 패킷을 보내는 경우에 특히 네트워크 효율성을 높이고 오버헤드를 줄일 수 있습니다. 이 문맥에서 주요 아이디어는 패킷을 대기열(_pendingList)에 추가하는 작업과 패킷을 보내는 작업을 분리하는 것입니다 밀어 넣는 작업과 보내는 작업이랑 분리를 해서 모이면 Send를 하는 거. 모으는 작업을 서버단인 Session에서 할 수 도 있고 컨텐츠단인 GameRoom에서 할 수도 있다. 여기서는 컨텐츠단에서 하는 것을 살펴보자. 1.패킷 모아 보내기 1_1. 밀어 넣는 작업과 보내는 작업이랑 분리 GameRoom에 List _pendingList = new List(); 를 생성하고, GameR.. Server programming 2023. 5. 16. 04_05_Job Queue_JobQuene#2 개요: 서버 백로그 및 레지스터 설정, 작업 큐 관리, 클라이언트 연결 및 패킷 전송 최적화 서버 백로그 및 레지스터 설정: 서버의 Listener에서 백로그(서버가 새로운 요청을 거부하기 전에 대기할 수 있는 최대 연결 요청 수)와 레지스터(생성할 소켓의 수)를 설정할 수 있도록 코드를 수정합니다. 이는 동시다발적인 연결 요청이 있더라도 멀티스레드 환경에서 효율적으로 처리할 수 있도록 도와줍니다. 작업 큐 관리 방법: 서버에서는 일감을 큐에 차곡차곡 쌓고 순차적으로 실행하는 방식을 사용합니다. 각 작업은 ITask 인터페이스를 구현하는 클래스로 표현되며, 이 클래스는 Execute 메서드를 통해 작업을 실행합니다. 또한, 이 방식은 락을 사용하는 부분을 최소화하여 성능을 개선하는 데 도움이 됩니다. 작.. Server programming 2023. 5. 16. 04_04_JobQueue_JobQuene#1 요약: 1. JobQueue 클래스 파일을 ServerCore에 생성하고, IJobQueue 인터페이스를 선언한다. JobQueue 클래스는 Action을 Queue로 들고 있으며, Push 함수와 Pop 함수를 정의한다. 2. GameRoom에 JobQueue를 적용하고 IJobQueue 인터페이스를 상속받아서 Push 인터페이스를 구현한다. 3. GameRoom의 Broadcast, Enter, Leave를 호출할 때 직접 접근이 아닌 _jobQueue에 밀어 넣는 방식으로 수정한다. 4. JobQueue에서 Push를 할 때 첫번째 일감이면 실행까지 담당하고, 첫번째가 아니라면 큐에 밀어넣고 바로 빠져나오는 방식을 구현한다. 5. GameRoom에서 JobQueue 인터페이스를 사용하므로, Broa.. Server programming 2023. 5. 7. 04_03_Job Queue_Command 패턴 기존 코드 방식 직원이 바로 주방에 달려가가지고 요리까지 하기 시작 ClientSession이라는 애가 뭔가 요청을 하면은 그거를 우리가 이제 PacketHandler 쪽에서 어떤 함수(C_ChatHandler)를 하나 만들어가지고 거기서 직접적으로 뭔가 코드를 실행하고 있었죠. 이전 예에서는 GameRoom에 접근해 가지고 Broadcast하는 거를 이제 그대로 실행하고 있었는데, 그게 결국에는 주방에 들어가 가지고 직접 요청한 것을 만들어 준다는 비유를 할 수가 있다. 기존 코드 방식의 문제점 규모가 커진다고 하면, 여러 명의 손님들이 동시다발적으로 주문을 하기 시작을 하면은 주방은 워낙 작아가지고. 한 번에 한 명씩밖에 못 들어가 가지고 이제 요리를 하는 공간은 굉장히 한정적인데도 불구하고, 이런 .. Server programming 2023. 5. 5. 04_02_Job Queue_채팅 테스트 #2_클라 이번 시간에 할 내용 요 : 지난 시간에 Server 쪽 작업을 했으니 오늘은 클라쪽 작업을 함. 요약: 1. DummyClient에 SessionManager 클래스를 추가하여 여러 개의 ServerSession을 관리할 수 있게 함. 2. DummyClient의 Program에서 Connect를 호출할 때, SessionManager를 이용해 생성한 Session을 전달하고 Connect 횟수를 조정할 수 있도록 함. 3. DummyClient의 ServerSession을 정리하고, OnRecv를 OnRecvPacket으로 변경. PacketManager를 이용해 패킷을 처리함. 4. Program에서 SessionManager를 이용해 패킷을 전송하도록 수정하고, 서버로부터 받은 패킷을 처리하는 P.. Server programming 2023. 5. 5. 04_01_Job Queue_채팅 테스트 #1_서버 다룰 내용 및 요약 이번 시간에는 서버 코어에서 발생하는 크래시를 수정하고 새로운 패킷을 설계하는 방법을 다룹니다. 또한, 클라이언트가 접속하면 자동으로 채팅방에 입장하게 하고, 게임 룸에 입장 및 퇴장 기능을 추가하는 방법을 소개합니다. 이를 통해 클라이언트가 채팅 패킷을 보낼 때 서버에서 처리하는 방법을 구현할 수 있습니다. 이러한 구현을 통해 서버와 클라이언트 간의 채팅 기능이 원활하게 동작하도록 할 수 있으며, 게임 내 채팅 기능을 구현하는 데 필요한 기본 구조를 마련할 수 있습니다. 이를 통해 채팅 기능이 추가된 게임 서버를 구축할 수 있습니다. 패킷까지는 어느정도 준비가 됐고, 세션에 대한 네트워크 부분도 어느정도 준비가 됐으니까, 이어서 컨텐츠를 작업할 대략적인 준비는 끝났다고 볼수 있다. .. Server programming 2023. 4. 25. 03_11_패킷 직렬화_PacketGenerator #6_PacketManager 코드 생성을 자동화, 패킷 분리 다룰 내용 및 요약 PacketManager 코드 생성을 자동화하는 방법을 설명합니다. 다음과 같은 단계를 따릅니다. PacketFormat 맞추기 PacketGenerator의 Program.cs에서 PacketFormat을 사용하여 코드 생성 GenPackets.bat 수정 에러 수정 DummyClient 대칭 작업 패킷 분리 이 프로세스는 PacketManager의 코드 생성을 자동화하고, 각 클라이언트와 서버 간 패킷을 분리하여 관리를 용이하게 합니다. 이로써 서버의 분산 처리, 해킹 대비, 패킷 사용범위 구분 등이 가능해집니다. 이해하는 것이 중요하며, 이를 바탕으로 다양한 환경에서 최적화를 할 수 있습니다. 의문점: 왜 PacketHandler는 자동으로 만들어 주지 않는 건가요? → Pack.. Server programming 2023. 4. 20. 이전 1 2 3 4 ··· 6 다음