Ask Your Question
0

분산서버 클라이언트 서버 이동 관련 문의

asked 2019-10-29 16:52:34 +0900

yongjupark gravatar image

updated 2019-10-29 17:34:58 +0900

Jinuk gravatar image

안녕하세요 lobby에서 매칭을 통해 성공 후 gameserver로 보내려고 하는데요

예제 내용을 토대로 작성하였습니다만


I1029 16:38:18.987327  4681 (Mono)lobbyserver.cs:54] OPEN : c6a4187e-fb22-42ff-bf9f-67c06b8f3e7b
I1029 16:38:19.802197  4679 (Mono)lobbyserver.cs:136] Client_ip_address : 127.0.0.1
I1029 16:38:19.833319  4678 (Mono)lobbyserver.cs:211] Succeed to login: id=Dragonfly
I1029 16:38:20.989431  4681 (Mono)lobbyserver.cs:241] Match ID : Dragonfly
I1029 16:38:21.022915  4679 (Mono)lobbyserver.cs:250] Successed in MatchMaking => id : Dragonfly2
I1029 16:38:21.023471  4679 (Mono)Common.cs:23] account_id : Dragonfly2
I1029 16:38:21.034225  4679 (Mono)Common.cs:40] Client redirecting: account_id=Dragonfly2, server_tag=game
I1029 16:38:21.035562  4679 (Mono)lobbyserver.cs:250] Successed in MatchMaking => id : Dragonfly
I1029 16:38:21.035706  4679 (Mono)Common.cs:23] account_id : Dragonfly
I1029 16:38:21.035969  4679 (Mono)Common.cs:40] Client redirecting: account_id=Dragonfly, server_tag=game
I1029 16:38:21.039695  4680 session_service.cc:2090] session closed: sid=ff0673c2-72f9-4ba5-9232-ae178f94f19b, reason=ServerDid
I1029 16:38:21.040525  4678 (Mono)lobbyserver.cs:60] Close : ff0673c2-72f9-4ba5-9232-ae178f94f19b
I1029 16:38:21.047808  4681 session_service.cc:2090] session closed: sid=c6a4187e-fb22-42ff-bf9f-67c06b8f3e7b, reason=ServerDid
I1029 16:38:21.048065  4681 (Mono)lobbyserver.cs:60] Close : c6a4187e-fb22-42ff-bf9f-67c06b8f3e7b

로그를 보시면 Client redirecting 이라고 나옵니다. 아래는 해당 코드이구요 즉, AccountManager.RedirectClient 가 정상적으로 되고있는것같은데...


 if (AccountManager.RedirectClient(session, target, session_context))
 {
    Log.Info("Client redirecting: account_id={0}, server_tag={1}", account_id, server_tag_to_redirect);

  }
  else
   {
       Log.Error("Client redirecting failure: account_id={0}, server_tag={1}", account_id, server_tag_to_redirect);
   }

AccountManager.RedirectClient 는 되는데 메뉴얼에 나와있는 OnClientRedirected 는 호출이 안되는데 이건 어떤식으로 호출이 되는건지 궁금하네요

결론은 현재 로비서버에 접속해 있는 2명의 유저를 매칭 성공하여 게임서버로 보내는 로직을 구현하고 있는데, 매칭까지 성공해서 AccountManager.RedirectClient 까지 정상적으로 실행되지만 그 이후 OnClientRedirected 가 호출이 되지 않아서 게임서버로 정상적으로 이동 됬는지 이동이 되었다면 정보는 어떤식으로 가져오는지 잘 모르겠네요...

edit retag flag offensive close merge delete

3 answers

Sort by » oldest newest most voted
0

answered 2019-10-29 19:00:16 +0900

yongjupark gravatar image

updated 2019-10-29 19:06:36 +0900

Jinuk gravatar image

각 서버 ip는 222.238.29.175이고 바꾼후 로그는 파일 첨부가 안되어 아래에 적습니다..

I1029 18:52:14.797628 13521 session_impl.cc:2210] [C->S] TCP/JSON: type=, length=0, session=00000000-0000-0000-0000-000000000000 
I1029 18:52:14.797857 13521 session_impl.cc:2210] [S->C] TCP/JSON: type=_session_opened, length=76, session=eec2854d-e7c3-408e-b894-aecde9dca8f0 {}
I1029 18:52:14.797922 13521 session_service.cc:2841] 새 세션을 생성했습니다: sid=eec2854d-e7c3-408e-b894-aecde9dca8f0, protocol=TCP, encoding=application/json, address=127.0.0.1:58426
I1029 18:52:14.826689 13537 (Mono)lobbyserver.cs:54] OPEN : eec2854d-e7c3-408e-b894-aecde9dca8f0
I1029 18:52:16.498343 13519 session_impl.cc:2210] [C->S] TCP/JSON: type=login, length=84, session=eec2854d-e7c3-408e-b894-aecde9dca8f0 {"id":"Dragonfly2"}
I1029 18:52:16.514413 13534 (Mono)lobbyserver.cs:136] Client_ip_address : 127.0.0.1
I1029 18:52:16.545423 13535 (Mono)lobbyserver.cs:211] Succeed to login: id=Dragonfly2
I1029 18:52:16.562081 13535 session_impl.cc:2210] [S->C] TCP/JSON: type=login, length=105, session=eec2854d-e7c3-408e-b894-aecde9dca8f0 {"result":"successed","id":"Dragonfly2"}
I1029 18:52:20.919066 13521 session_impl.cc:2210] [C->S] TCP/JSON: type=match, length=66, session=eec2854d-e7c3-408e-b894-aecde9dca8f0 {}
I1029 18:52:20.920627 13537 (Mono)lobbyserver.cs:241] Match ID : Dragonfly2
I1029 18:52:26.482100 13518 transport.cc:478] 클라이언트 플러그인 버전: 313
I1029 18:52:26.482142 13518 session_impl.cc:2210] [C->S] TCP/JSON: type=, length=0, session=00000000-0000-0000-0000-000000000000 
I1029 18:52:26.482198 13518 session_impl.cc:2210] [S->C] TCP/JSON: type=_session_opened, length=76, session=07509a98-0f84-4e4d-9fa4-466684637707 {}
I1029 18:52:26.482237 13518 session_service.cc:2841] 새 세션을 생성했습니다: sid=07509a98-0f84-4e4d-9fa4-466684637707, protocol=TCP, encoding=application/json, address=127.0.0.1:58428
I1029 18:52:26.482475 13534 (Mono)lobbyserver.cs:54] OPEN : 07509a98-0f84-4e4d-9fa4-466684637707
I1029 18:52:27.210862 13520 session_impl.cc:2210] [C->S] TCP/JSON: type=login, length=83, session=07509a98-0f84-4e4d-9fa4-466684637707 {"id":"Dragonfly"}
I1029 18:52:27.211390 13536 (Mono)lobbyserver.cs:136] Client_ip_address : 127.0.0.1
I1029 18:52:27.235199 13537 (Mono)lobbyserver.cs:211] Succeed to login: id=Dragonfly
I1029 18:52:27.235304 13537 session_impl.cc:2210] [S->C] TCP/JSON: type=login, length=104, session=07509a98-0f84-4e4d-9fa4-466684637707 {"result":"successed","id":"Dragonfly"}
I1029 18:52:28.492265 13521 session_impl.cc:2210] [C->S] TCP/JSON: type=match, length=66, session=07509a98-0f84-4e4d-9fa4-466684637707 {}
I1029 18:52:28.492528 13534 (Mono)lobbyserver.cs:241] Match ID : Dragonfly
I1029 18:52:28.529528 13536 (Mono)lobbyserver.cs:250] Successed in MatchMaking => id : Dragonfly2
I1029 18:52:28.530947 13536 (Mono)Common.cs:23] account_id : Dragonfly2
I1029 18:52:28.539615 13536 (Mono)Common.cs:40] Client redirecting: account_id=Dragonfly2, server_tag=game
I1029 18:52:28.542541 13536 session_impl.cc:2210] [S->C] TCP/JSON: type=match, length=222, session=eec2854d-e7c3-408e-b894-aecde9dca8f0 {"result":"successed","team_A":"Dragonfly2","team_B":"Dragonfly","teamA_x":0.0,"teamA_y":-17.3,"teamA_z":-30.0,"teamB_x":0.0,"teamB_y":-17.3,"teamB_z":-38.0}
I1029 18:52:28.543035 13537 session_impl.cc:2210] [S->C] TCP/JSON: type=_sc_redirect, length=456, session=eec2854d-e7c3-408e-b894-aecde9dca8f0 {"host":"192.0.2.113","token":"CA24XZiQlsJkrzcjAAAAAAAAAAAKAAAARHJhZ29uZmx5MnsiaWQiOiJEcmFnb25mbHkyIiwib3Bwb25lbnQiOiJEcmFnb25mbHkiLCJtYXRjaGluZyI6ImRvbmUiLCJyZWFkeSI6MH0i46rhOGMQ417UoYRr35ZwYnZu8NxVdhkNQMqqe7heMg==","flavor":"game","target_tags":["game"],"current_tags":["_multicast","lobby"],"ports":[{"port":9012,"protocol":1 ...
(more)
edit flag offensive delete link more

Comments

IP 주소가 제대로 인식되고 있지 않은 것으로 보입니다. 매뉴얼을 참고하시어 아래 두 가지 중 하나를 실행해주세요:

  • nic:eth0 에서 eth0 대신 실제로 서버에 있는 네트워크 인터페이스를 입력. ifconfig 혹은 ip link 명령으로 확인가능합니다.
  • nat:192.0.2.113 에서 192.0.2.113 대신 실제 IP 주소를 입력
Jinuk gravatar imageJinuk ( 2019-10-29 19:11:22 +0900 )edit

실제 주소를 입력하니까 게임서버 세션이 열리는것까진 확인됬으나, OnClientRedirected는 불려지지가 않네요..

yongjupark gravatar imageyongjupark ( 2019-10-29 19:29:38 +0900 )edit

서버 A에서 서버 B로 보내는 상황일 때,

AccountManager.RegisterRedirectionHandler (OnClientRedirected);

위와 같이 핸들러를 등록하는 코드가 서버 B 쪽에 존재하는지 확인해주실 수 있을까요? 서버의 Install 시점에 호출되어야 합니다.

Jinuk gravatar imageJinuk ( 2019-10-29 19:30:55 +0900 )edit

네 존재합니다. 예를들어 로비서버에서 게임서버로 보낼 시 게임서버 install부분에 등록해놓았습니다.

yongjupark gravatar imageyongjupark ( 2019-10-29 20:26:09 +0900 )edit

게임서버 세션이 열리는것으로 보아 이동은 되었다는 말인데.. 혹시 매니페스트나 다른 설정을 해주어야 할것들이 있을지요..?

yongjupark gravatar imageyongjupark ( 2019-10-29 20:29:06 +0900 )edit
0

answered 2019-10-29 17:34:10 +0900

yongjupark gravatar image

updated 2019-10-29 18:13:59 +0900

Jinuk gravatar image

using System; using System.Collections.Generic; using funapi; using Newtonsoft.Json.Linq; using Sfrserver;

namespace Sfrserver
{   
    public class gameserver
    {
        public static bool Install()
        {
            NetworkHandlerRegistry.RegisterSessionHandler(
                new NetworkHandlerRegistry.SessionOpenedHandler(OnSessionOpened),
                new NetworkHandlerRegistry.SessionClosedHandler(OnSessionClosed));            

            AccountManager.RegisterRedirectionHandler(OnClientRedirected);

            Log.Info("game Server Install Complete");


            return true;
        }


        public static void OnClientRedirected(string account_id, Session session, bool success, string extra_data)
        {         
            if (!success)
            {
                Log.Error("Failed to redirect client: account_id={0}", account_id);
                return;
            }

            JObject session_context = JObject.Parse(extra_data);
            Log.Assert(session_context != null);

            lock (session)
            {
                session.Context = session_context;
            }

            Log.Info("Client redirected: account_id={0}", account_id);
        }


        public static void OnSessionOpened(Session session)
        {
            ActivityLog.SessionOpened(session.Id.ToString(), WallClock.Now);

            Log.Info("GameServer SessionOpened");

        }

        public static void OnSessionClosed(Session session, Session.CloseReason reason)
        {
            ActivityLog.SessionClosed(session.Id.ToString(), WallClock.Now);
            Log.Info("GameServer SessionClosed");
            // 세션을 초기화 합니다.
            //FreeUser(session);
        }       
    }
}

위 와 같이 이동될 서버에다가 붙였음에도 불구하고 호출이 안되네요..

edit flag offensive delete link more

Comments

다음 두 정보 부탁드립니다.

  1. 서버를 실행하실 때 "-v=2 -session_message_logging_level=2" 인자를 Redirect 시도 후 생성된 로그파일과
  2. 각 서버의 IP 를 올려주시면
Seunghyun gravatar imageSeunghyun ( 2019-10-29 18:11:59 +0900 )edit
0

answered 2019-10-29 17:04:49 +0900

Seunghyun gravatar image

서버의 Install() 함수에서 다음과 같이 OnClientRedirected 함수를 등록하시면 됩니다.

public static bool Start ()
{
  ...
  AccountManager.RegisterRedirectionHandler (OnClientRedirected);
  ...
}

public static void OnClientRedirected (string account_id,
                                       Session session,
                                       bool success,
                                       string extra_data)
{
  if (success)
  {
    // Authentication succeeded.
    ...
  }
  else
  {
    // Authenticated failed.
    ...
  }
}
  • 이 코드는 이동될 서버에 넣어주셔야하며, 클라이언트가 이동해왔을 때 처리를 하시면됩니다.

OnClientRedirected 함수의 마지막 인자인 extra_data 는 이동전 서버에서 RedirectClient() 호출 시 전달한 extra_data 와 같습니다. 이 변수를 활용하시면 어떤 이유로 이동해왔는지 확인할 수 있습니다.

edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

Stats

Asked: 2019-10-29 16:52:34 +0900

Seen: 50 times

Last updated: Oct 29