inflearn logo
강의

Course

Instructor

[C# and Unity MMORPG Game Development Series] Part 4: Game Server

Session #1

Session #2 내용중 왜 스레드가 동시다발적으로 접근 불가능한지 질문

664

jiw720

17 asked

0

Session#2 강의 시작부분에 설명해주신 내용에서,

SEssion의 receive는 OnRecvCompleted()메서드에 여러 스레드가 동시다발적으로 들어가는 경우는 없다.

 

라고 하셨는데, 왜 그런지 이해를 못했습니다.

ServerCore의 OnAcceptHandler는 콜백함수라서 콜백함수는 다른 스레드가 생겨나서 실행이 된다고 들었던 것 같은데,

 

그렇다면 두 스레드가 OnAcceptHandler에서 Session.Start()를 해버리면 OnRecvCompleted()메서드를 두 스레드가 동시에 실행할 경우가 생기지 않나요?

unity network C#

Answer 4

0

jiw720

아래 코드처럼 Session session = new Session(); 이후에 그 한 세션의 session.Start를 여러 스레드가 수행하는 경우는 어떻게 되는건가요?

0

jiw720

감사합니다. 그런데 만약 이렇게 동일한 session을 start하게된다면 같은 OnRecvCompleted()메서드에 진입하게되는 것 아닌가요?

0

jiw720

 static void OnAcceptHandler(Socket clientSocket)
        {
            try
            {
                Session session = new Session();
                session.Start(clientSocket);
                
                //스레드 1,2가 session.Start를 하도록 수행 

                //보낸다( string to byte 해서)
                byte[] sendBuff = Encoding.UTF8.GetBytes("welcome to mmorpg server");
                
                session.Send(sendBuff);

                Thread.Sleep(1000);
                session.Disconnect();
                
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.WriteLine(e);
            }
        }

0

Rookiss

new Session();으로 새로 동적 생성을 하고 있기 때문에
동일한 Session일 수가 없습니다.

0

Rookiss

동시에 2 쓰레드가 OnRecvCompleted를 호출할 수 있습니다.
하지만 호출된 다수의 OnRecvCompleted가 동일한 Session을 대상으로 호출될 수는 없다는게
핵심입니다. 그렇다면 락 처리가 필요 없다는 것이죠.
낚시대에 늘 비유를 하는데 낚시대를 하나만 던졌으면,
낚시꾼이 아무리 많더라도 동일한 낚시대는 한번만 끌어올릴 수 있겠죠

TLS 질문드립니다.

0

43

2

SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.

0

46

2

Unity Span

0

76

2

XML, Dll 차이점

0

105

2

Session 질문입니다

0

79

1

Write Read 커서 키워드

0

76

1

더미 클라이언트 수에 따른 OnDisconnect 발생

0

70

2

네트워크 Send 전담 스레드 배치

0

98

2

UnhandledException 으로 서버 터지는 경우

0

85

2

컨텐츠 단, 엔진 단

0

105

1

질문 있습니다

0

77

2

C# 게임서버 3D MMORPG

0

145

2

유니티6 버전

0

97

2

receive하는 부분과 send하는 부분의 차이

0

134

2

커서의 위치의 중요성

0

103

2

C++ 전혀 모르는데 C# 서버

0

169

2

강의에 질문이 있습니다

0

86

2

멀티스레드 이해도 질문

0

95

1

500 vs 500

0

130

3

OnAcceptHandler 액션 함수

0

61

1

이 정도 서버의 객관적인 수준이 궁금합니다.

0

191

2

36. Serialization #3 에서 string (name) 코드 수정 질문

0

82

2

외부 컴퓨터와의 통신 방법이 궁금합니다

0

106

1

스핀락 질문.

0

110

2