Ask Your Question
0

서버에서 세션을 닫은 후에도 서버에서 메시지를 전송하는게 가능한지 문의드립니다.

asked 2018-11-02 10:26:27 +0900

simpler gravatar image

updated 2018-11-02 12:22:25 +0900

Jinuk gravatar image

서버에서 접속중인 클라이언트의 Session을 Close() 처리하였습니다. 일정 시간후 클라이언트에서는 기존 Session으로 Connect 하여 (당연히 FunapiSession.Create 함수는 호출 하지 않았고요) 서버로 메시지 전송 할경우, 서버는 신규 Session을 Open 하지 않고 tcp 전송 처리가 가능하던데요. Session을 Close 처리하였는데 Session Open을 하지 않고 통신이 되는게 맞는 건가요? 서버의 "close_transport_when_session_close": true 입니다.

I1102 02:30:23.211693  4493 aid_server.cc:93] Starting login server
I1102 02:30:37.098347  4498 transport.cc:380] Client plugin version: 265
I1102 02:30:37.098511  4498 session_impl.cc:2126] [C->S] TCP/Protobuf: type=, length=0, session=00000000-0000-0000-0000-000000000000 
I1102 02:30:37.098881  4498 session_impl.cc:2126] [S->C] TCP/Protobuf: type=_session_opened, length=61, session=3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1 
I1102 02:30:37.099036  4498 session_service.cc:2146] session created: sid=3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1, protocol=TCP, encoding=application/octet-stream, address=14.33.100.95:62464
I1102 02:30:37.098937  4529 login_event_handlers.cc:63] OnTransportTcpAttached_id :3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1
I1102 02:30:37.099241  4529 login_event_handlers.cc:23] OnSessionOpened_session_id :3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1
I1102 02:30:37.158066  4499 session_impl.cc:2126] [C->S] TCP/Protobuf: type=, length=44, session=3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1 
I1102 02:30:37.304252  4496 session_impl.cc:2126] [C->S] TCP/Protobuf: type=login, length=110, session=3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1 [login_req] { id: "TestUser1" device_id: "DFDFSFSDFWEGWEGEGWE" os_type: "windows" maket_type: "Goolge" auth_type: "guest" }
I1102 02:30:37.310436  4529 login_event_handlers.cc:153] Session_id=3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1
I1102 02:30:37.317389  4529 login_event_handlers.cc:153] Session_id=3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1
I1102 02:30:37.317646  4529 login_event_handlers.cc:252] client_ip_address=14.33.100.95
I1102 02:30:37.317728  4529 login_event_handlers.cc:262] Succeed to login: id=TestUser1
I1102 02:30:37.317975  4529 session_impl.cc:2126] [S->C] TCP/Protobuf: type=login, length=70, session=3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1 [login_repl] { result: OK host_name: "52.231.68.36" }
I1102 02:30:37.364382  4499 session_impl.cc:2126] [C->S] TCP/Protobuf: type=, length=44, session=3b4fcd0e-7113-43c2-acf2-a6fc1d65f1c1 
I1102 02:30:39.527246  4499 transport.cc:380] Client plugin version: 265
I1102 02:30:39.527283  4499 session_impl.cc:2126] [C->S] TCP/Protobuf: type=, length=0, session=00000000-0000-0000-0000-000000000000 
I1102 02:30:39.527357  4499 session_impl.cc:2126] [S->C] TCP/Protobuf: type=_session_opened, length=61, session=60bcb24e-c198-4dd5-a91d-6748a155f5e8 
I1102 02:30:39.527390  4499 session_service.cc:2146] session created: sid=60bcb24e-c198-4dd5-a91d-6748a155f5e8, protocol=TCP, encoding=application/octet-stream, address=14.33.100.95:62466
I1102 02:30:39.527484  4529 login_event_handlers.cc:63] OnTransportTcpAttached_id :60bcb24e-c198-4dd5-a91d-6748a155f5e8
I1102 02:30:39.527523  4529 login_event_handlers.cc:23] OnSessionOpened_session_id :60bcb24e-c198-4dd5-a91d-6748a155f5e8
I1102 02:30:39.622436  4499 session_impl.cc:2126] [C->S] TCP/Protobuf: type=, length=44, session=60bcb24e-c198-4dd5-a91d-6748a155f5e8 
I1102 02:30:39.760064  4497 session_impl.cc:2126] [C->S] TCP/Protobuf: type=login, length=110, session=60bcb24e-c198-4dd5-a91d-6748a155f5e8 [login_req] { id: "TestUser1" device_id: "DFDFSFSDFWEGWEGEGWE" os_type: "windows" maket_type: "Goolge" auth_type: "guest" }
I1102 02:30:39.760596  4529 login_event_handlers.cc:107] OnLoggedIn_Failed_id=TestUser1
I1102 02:30:39.760710  4529 session_impl.cc:2126] [S->C] TCP/Protobuf: type=login, length=56, session=60bcb24e-c198-4dd5-a91d-6748a155f5e8 [login_repl] { result: OVERLAP }
I1102 02:30:39.765719  4529 login_event_handlers.cc:126] Logged_out(local) by duplicated login request: id=TestUser1
I1102 02:30:39.765884  4529 session_impl.cc:2126] [S->C] TCP/Protobuf: type=_session_closed, length=55, session ...
(more)
edit retag flag offensive close merge delete

2 answers

Sort by » oldest newest most voted
0

answered 2018-11-02 12:20:40 +0900

simpler gravatar image

updated 2018-11-02 12:24:23 +0900

다시 한번 확인해보니 Close 처리는 정상적으로 되었었네요..죄송합니다.

현재 중복 로그인 확인하여 Session을 Close 처리를 하고 있는데요. Session이 Close 처리된 클라이언트가 다시 재 연결되어 통신이 되었던것으로 확인되었습니다. AccountManager::CheckAndSetLoggedInAsync() 통해 중복 로그인을 확인하고 있는데요. 최초 중복 로그인애 대한 처리가 정상적이였나, Session Close 처리된 클라이언트가 다시 재접속하여 로그인이 성공이 되었습니다. 같은 id로 양쪽에서 성공된 현상입니다. 로그 확인 부탁 드리겠습니다.ㅜ

edit flag offensive delete link more

Comments

다음을 확인 부탁드립니다:

  • session closed 핸들러 (기본 생성하는 코드의 OnSessionClsoed )에서 SetLoggedOut 혹은 SetLoggedOutAsync 를 호출하는지 여부: 세션이 닫혔는지와 무관하게 (서버 프로세스 안에서는) 메모리 주소만 보기 때문에 위처럼 동작할 수 있습니다.
  • 두 대 이상의 서버를 사용하는데 RpcService 가 활성화되었는지 여부 - 서로 다른 서버의 로그인 정보를 공유하려면 Rpc가 필요합니다.
Jinuk gravatar imageJinuk ( 2018-11-02 12:25:28 +0900 )edit

SetLoggedOutAsync 와 SetLoggedOutGlobalAsync 차이점을 알수 있을까요?

simpler gravatar imagesimpler ( 2018-11-02 15:40:50 +0900 )edit
  • SetLoggedOut : 세션을 로그아웃 시킵니다. 해당 서버에 접속한 경우에만 유효합니다.
  • SetLoggedOutGlobal: 세션을 로그아웃 시킵니다. 분산시스템으로 연결한 모든 서버에서 해당 유저를 찾아서 로그아웃합니다.
Jinuk gravatar imageJinuk ( 2018-11-02 15:46:00 +0900 )edit
0

answered 2018-11-02 10:41:14 +0900

Eunhee Lee gravatar image

안녕하세요. Session을 Close 하면 Session Id도 삭제되기 때문에 클라이언트가 삭제된 Session Id로 연결을 시도할 경우 없는 Session Id 라는 로그를 남기고 연결을 끊도록 되어 있습니다. 혹시 가능하시면 여기에 서버 로그의 일부를 올려주시면 확인해보겠습니다.

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

1 follower

Stats

Asked: 2018-11-02 10:26:27 +0900

Seen: 26 times

Last updated: Nov 02