GAME MAKER 강좌
KAYAN
◈ 기본 서버/클라이언트 구조
서버와 클라이언트의 구성에 대해 간단하게 알아봅시다.
(▲ 서버/클라이언트)
서버는 일반적으로 network_create_server 함수를 통해 만들 수 있습니다.
◎ network_create_server(type, port, max_client) - type : [소켓 유형 상수] 생성할 서버의 유형 - port : [실수] 서버가 사용할 포트. 0~65535. - max_client :[실수] 한 번에 연결할 수 있는 최대 클라이언트 수 [소켓 유형 상수] - network_socket_tcp : TCP를 사용하여 소켓을 만듭니다. - network_socket_udp : UDP를 사용하여 소켓을 만듭니다. - network_socket_ws : TCP를 사용하여 웹소켓을 만듭니다. - network_socket_wss * : TCP를 사용하여 보안 웹소켓을 만듭니다. |
함수는 서버 생성에 실패하면 0 보다 작은 값이 반환되고 성공하면 서버를 식별하는데 사용할 수 있는 소켓 ID 가 반환됩니다.
클라이언트는 서버 생성시 지정한 최대 수만큼 접속 시킬 수 있으며, 초과된 클라인언트는 서버로의 접속이 거부됩니다.
일반적으로 아래와 같이 구성할 수 있습니다.
global.client_socket = network_create_socket( network_socket_tcp ); //소켓 생성 var _client = network_connect( global.client_socket, "192.134.0.1", 6510 ); //서버 연결 if _client<0{ //서버 연결 실패 } else{ //서버 연결 성공 } |
서버 생성에 실패했을 때, 게임을 재시작하거나, 종료할 수 있는 이벤트를 구성하면 되고,
서버를 정상적으로 생성했다면, 게임 구성에 필요한 이벤트를 구성하면 됩니다.
서버 생성에 실패하는 경우는 대부분 네트워크 포트가 이미 열려있거나 게임이나 다른 앱이 이미 사용하고 있는 경우입니다.
클라이언트는 서버에 접속하기 위해 먼저 network_create_socket 함수로 소켓을 만들어야 합니다.
◎ network_create_socket(type); - type : [소켓 유형 상수] 생성할 서버의 유형 |
그리고 network_connect 함수로 서버의 IP로 접속하면 됩니다.
◎ network_connect(socket, url, port); - socket :[네트워크 소켓 ID] 사용할 소켓의 ID. - url :[문자열] 연결할 URL 또는 IP(문자열). - port :[실수] 연결할 포트. |
함수는 서버 연결에 실패하면 0보다 작은 값이 반환되고, 성공하면 소켓 ID가 반환됩니다.
예를 들면, 아래와 같이 구성할 수 있습니다.
global.client_socket = network_create_socket( network_socket_tcp ); //소켓 생성 var _client = network_connect( global.client_socket, "192.134.0.1", 6510 ); //서버 연결 if _client<0{ //서버 연결 실패 } else{ //서버 연결 성공 } |
접속할 서버의 IP와 연결할 서버의 포트를 지정하면 됩니다.
클라이언트에서 접속할 포트가 서버의 포트와 동일해야 서버에 연결 시킬 수 있습니다.
기본적으로 이 함수는 동기식이므로 연결이 이루어질 때까지 게임이 "멈춰" 보일 수 있습니다.
그럴 때는 network_set_config 함수를 사용하여 연결에 대한 시간 초과 값을 설정하거나,
또는, network_connect_async 함수를 사용하여 비동기로 연결하는 방법이 있습니다.
global.client_socket = network_create_socket( network_socket_tcp ); network_set_config( network_config_connect_timeout, 1000 ); //연결 시간 초과 설정( 밀리초 단위 ) var _client = network_connect( global.client_socket, "192.134.0.1", 6510 ); if _client<0{ //서버 연결 실패 } else{ //서버 연결 성공 } |
타임 아웃 시간을 너무 낮게 설정하지 말고 LAN 전용 게임의 경우 약 1000 (1초)으로, 인터넷의 경우 4000 (4초)정도로 유지하는 것이 좋습니다.
연결 시간이 초과 되면, 연결 시도를 중지하고 연결 실패로 처리합니다.
아래 함수를 사용하면 비동기로 연결할 수 있습니다.
◎ network_connect_async(socket, url, port); - socket :[네트워크 소켓 ID] 사용할 소켓의 ID. - url :[문자열] 연결할 URL 또는 IP(문자열). - port :[실수] 연결할 포트. |
비동기 함수가 실행되는 동안, 게임은 멈추기 않고 계속 유지됩니다.
함수는 비동기로 연결되므로, 함수 사용시 발동하는 네트워크 비동기 이벤트(Network Async Event)에서 연결을 체크해야 합니다.
global.client_socket = network_create_socket( network_socket_tcp ); network_connect_async( client_socket, "192.134.0.1", 6510 ); |
먼저 서버 연결을 시도하고, 아래와 같이 네트워크 비동기 이벤트(Network Async Event)에서 이벤트를 구성합니다.
비동기 함수는 network_type_non_blocking_connect 유형이 추가로 트리거 됩니다.
///네트워크 비동기 이벤트( Asynchronous ▶ Async - Networking 이벤트 ) var n_id = ds_map_find_value( async_load, "id" ); if n_id == global.client_socket{ var type = ds_map_find_value( async_load, "type" ); if ( type = network_type_non_blocking_connect ){ //비동기 네트워크 함수를 사용했을 때 var succeeded = ds_map_find_value( async_load, "succeeded" ); //"succeeded" : 0 = 실패 1 = 성공 if ( succeeded == 0 ){ //서버 연결 실패 game_restart( ); //예 ) 연결 실패했을 때 이벤트 } else{ //서버 연결 성공 } } } |
서버에 연결 여부는 async_load 맵의 "succeeded"키 값으로 반환됩니다.
"succeeded" 키 값이 0이면 연결 실패이며 0이 아니면 연결 성공으로 처리됩니다.
'GameMaker강좌[GMS2] > 네트워크강좌' 카테고리의 다른 글
[게임메이커 강좌-네트워킹][GMS2] 채팅 프로그램 만들기-4-채팅 메시지 보내기 (0) | 2024.12.24 |
---|---|
[게임메이커 강좌-네트워킹][GMS2] 채팅 프로그램 만들기-3-메시지 송수신 (0) | 2024.12.23 |
[게임메이커 강좌-네트워킹][GMS2] 채팅 프로그램 만들기-2-서버/클라이언트 (0) | 2024.12.23 |
[게임메이커 강좌-네트워킹][GMS2] 채팅 프로그램 만들기-1-채팅 기본 구성 (0) | 2024.12.21 |
[게임메이커 강좌-네트워킹][GMS2] 게임메이커 네트워킹 기능 (1) | 2024.12.19 |
댓글