버그 해결을 위한 모든 질문을 던져
+1 vote
223 views
저는 아직 학생이라서 iocp로 클라이언트와 서버를 연결해보는 것까지만 해보았습니다.

실제 업무환경에서는 분산 서버 시스템을 사용하니까 물리적인 서버들이 서로 네트워크 선으로 연결되어 있다고 알고 있습니다.

그래서 하나의 서버가 열어두어야 할 포트는 여러개가 될 수 있다고도 들었습니다.

서버끼리 서로 연결하는 것은 기존의 소켓 연결과 크게 다르지 않다고 생각하는데

클라이언트를 다른 서버로 넘겨주는 경우에 대해서는 감이 잘 오지 않습니다.

예를 들어서 로그인 서버에서 클라이언트의 접속이 허용되면, 로비서버나 혹은 월드 서버로 클라이언트 소켓을 넘겨주어야 하는데,

어떤 방식을 사용해서 소켓 연결을 유지하면서 넘겨주는지 궁금합니다.
asked (10 point) , 223 views
지나가는 나그네입니다만.. 이런 것들을 생각시고 질문하신 다는 것 자체가 좋아보입니다.

의문이 생기는 한, 세상에 바보같은 질문은 없다고 생각합니다. 건승하세요.
감사합니다.. 열심히 하겠습니다!

2 answers

+1 vote
우수 답변
로그인 서버가 접속해야 할 월드 서버의 접속정보(IP, 포트 등)를 클라이언트에게 내려주는게 일반적일꺼고,

트래픽이 과도하지 않다면 로그인서버가 패킷을 월드서버로 릴레이하는 방식도 생각해 볼 순 있겠지요.

소켓 자체를 다른 서버로 접속 끊어짐 없이 넘겨주는 방식은 TCP가 생겨먹은 모양으로 볼 때 불가능할 거 같습니다.
answered (44 point)
선택됨
감사합니다. 그럼 클라이언트가 월드 서버의 접속정보를 받았을 때, 잠시 접속을 끊고 다시 접속을 하는 방식이 맞는 건지요?
구현에 정답은 없습니다.

접속을 끊고 다시해도 괜찮은 방식의 게임이라면 그렇게 해도 되고, 심리스하게 여러서버를 걸쳐 돌아다녀야 한다면, 중복으로 소켓을 유지해서 자연스럽게 전환시킬 필요도 있겠지요. 만들고자 하는 게임의 특성에 가장 맞는 방식을 선택하시면 됩니다.

소켓을 새로 생성하는건 생각보다 무거운 작업이니, 여러 월드를 걸쳐 돌아다니는 방식이라면 앞단에 릴레이서버를 두고 해당 서버가 클라이언트의 소켓을 받고, 적절하게 월드서버로 분배해주는 방식도 고려해볼 수 있습니다. 아니면 걍 UDP로 던지는것도 생각해 볼 수 있겠지요 ^^;

처음 말씀드렸던 것 처럼 "이래야 한다!!" 라는건 없습니다. 테스트 해보시고 가장 적합한 방법을 선택 하세요~
정말 좋은 답변인듯 하네요.
0 votes
소켓은 넘겨주지 않습니다. 서버가 클라이언트에게 다른 아이피로 접속하라고 전달해주게 됩니다.

 

로그인 서버는 해당 유저가 갈꺼니까 대기하라는 값을 소켓을 통해 아니면 DB를 통해 다른 서버에 전달 합니다.

 

클라이언트가 다른 서버에접속 하게되고 적절한 인증 과정을 거치게 되겠죠.

 

즉 소켓 연결은 유지 되지 않으나 유저의 관점으로 봤을때는 넘겨 준것 처럼 보이겠죠.
answered (301 point)
정말 감사합니다!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

597 질문
758 answers
727 댓글
118,330 users