VisualStudio/C#서버 25

[C#서버] Akka.net과 Actor모델 Part.2

1. Dispatcher ( 액터 메시지 처리 스레드 관리 )액터를 사용할 때, 메시지가 액터에 도달하는 과정은 매우 중요합니다. 여기서 핵심 역할을 하는 것이 바로 Dispatcher입니다. Dispatcher는 액터의 메일박스에서 메시지를 꺼내어 액터가 실제로 작업을 수행하는 OnReceive() 메서드로 전달하는 중개자입니다. 쉽게 말해, 액터와 스레드 사이의 연결 고리라고 할 수 있습니다.이 Dispatcher는 액터가 메시지를 처리하는 데 필요한 스레드를 관리합니다. 여러 액터가 동시에 메시지를 수신하고 처리할 수 있도록 도와줍니다. 예를 들어, 사용자가 UI에서 여러 작업을 동시에 수행하는 경우, Dispatcher는 각각의 액터가 독립적으로 메시지를 처리할 수 있게 합니다. 이를 통해 사용자..

[C#서버] Akka.net과 Actor모델 Part.1

1. Akka.net이란?.NET 플랫폼에서 사용할 수 있는 오픈 소스 프레임워크로, Actor 모델을 구현하여 병렬성과 분산 시스템을 쉽게 구축할 수 있도록 도와줍니다.2. Actor모델 이란?Actor 모델은 큰 프로젝트에서 여러 작업을 동시에 처리하거나, 많은 사용자가 동시에 접속하는 시스템을 만들 때 매우 유용한 패턴입니다. 이 모델을 이해하기 위해 먼저, 우리가 흔히 사용하는 객체 지향 프로그래밍(OOP)과 비교해볼게요.객체 지향 프로그래밍에서는 메서드를 호출하고, 객체의 상태를 변경하는 것이 기본입니다. 그러나 동시성 문제를 처리하려면 여러 스레드가 공유하는 메모리와 이를 관리하는 락(lock)이라는 장치를 사용해야 합니다. 하지만 락은 복잡할 뿐만 아니라, 잘못 사용하면 시스템이 멈추거나 성..

[C#서버] 실시간 서버 만드는 법 예제

지난 포스팅에서 패킷을 만들고, 클라이언트에서 패킷을 전송하는 것에 대해 살펴봤다. 이번에는 서버에서 그 패킷을 받아 응답하는 것을 하려고 한다. 2019/12/17 - [게임을 만들자/C# 서버] - c# 실시간 게임 서버 만들기 1 - 패킷 2019/12/19 - [게임을 만들자/C# 서버] - c# 실시간 게임 서버 만들기 2 - 클라이언트 1. 유저 접속 대기 서버 프로그램을 시작하면 우선적으로, 서버 소켓을 열고, 그 소켓에서 유저의 접속을 받는 것이다. 아래 코드에서 start함수부터 살펴 보면 된다. 유의할 점은, 유저 접속을 기다리는 부분이 메인 스레드가 아닌 서브 스레드에서 일어난 다는 것이다. '왜?'라는 생각이 들 수 있는데, 나는 [접속, 로직, db, http통신] 등에 대해서는 ..

[C#서버] 서버 개발 순서

DNS부터 SEND 블록킹 방식으로 작성 Listener생성 Accept 논블록킹 Session생성 Recv 논블록킹(SetBuffer 초기값 생성) Send 논블록킹 (sendqueue, pandinglist, lock) Disconnected작성 (Interlock) Session클래스 abstract class로 변경 Onsend, OnRecv, OnConnected, OnDisconnected 구현 Listener AcceptComp를 Func로 Session을 생성하게 수정 Connector생성 Connect논블로킹 RecvBuffer생성 SegmentBuffer, writPos, readPos, FreeSize, DataSize, ReadBuffer, WriteBuffer 구현 Session클..

[C#서버] 구글 프로토 버퍼(Google Protobuf C#)

구글 프로토버퍼란? Google Protocol Buffers(protobuf)는 데이터 직렬화 형식으로 사용되는 강력하고 효율적인 도구로, 다양한 언어와 플랫폼 간에 데이터를 교환하고 저장하기 위해 사용됩니다. protobuf의 주요 장점은 다음과 같습니다: 효율적인 직렬화: protobuf는 바이트 크기 측면에서 효율적입니다. 작은 크기의 직렬화된 데이터를 생성하며, 이는 데이터를 네트워크로 전송하거나 디스크에 저장할 때 대역폭과 저장 공간을 절약합니다. 빠른 역직렬화: protobuf 메시지는 효율적인 이진 형식으로 저장되므로 역직렬화 속도가 빠릅니다. 데이터를 직렬화된 형식에서 메모리 객체로 변환하는 작업이 빠르게 수행됩니다. 이식성: protobuf는 언어 중립적인 형식으로 데이터를 정의하며, ..

[C#서버] 빌드 경로 AppendTargetFrameworkToOutputPath

AppendTargetFrameworkToOutputPath AppendTargetFrameworkToOutputPath 속성은 TFM(대상 프레임워크 모니커)을 출력 경로(OutputPath에 정의)에 추가할지 여부를 제어합니다. .NET SDK는 대상 프레임워크와 런타임 식별자(있는 경우)를 출력 경로에 자동으로 추가합니다. AppendTargetFrameworkToOutputPath를 false로 설정하면 TFM이 출력 경로에 추가되지 않습니다. 그러나 출력 경로에 TFM이 없으면 여러 빌드 아티팩트가 서로 덮어쓸 수 있습니다. 예를 들어 .NET 5 앱에서 다음과 같이 설정하면 출력 경로가 bin\Debug\net5.0에서 bin\Debug로 변경됩니다. XML복사 false 출처 - https:..

[C#서비][방법] Packet자동화 xml파일 읽는 법

static void Main(string[] args) { XmlReaderSettings settings = new XmlReaderSettings() { IgnoreComments = true,//주석무시 IgnoreWhitespace = true//스페이스바 무시 }; using (XmlReader r = XmlReader.Create("PDL.xml", settings)) { r.MoveToContent();//xml에 존재하는 헤더를 건너 뛴다. while (r.Read()) { if (r.Depth == 1 && r.NodeType == XmlNodeType.Element)//XmlNodeType.Element은 xml의 처음 시작 변수의미 마지막 닫을 때는 필요 없기 때문. Console...