반응형
소켓 통신이란, 두 개의 컴퓨터 또는 장치 간의 데이터를 실시간으로 주고받기 위한 방법입니다.
특히 모바일 앱과 웹 간의 통신을 원활하게 하기 위해 많이 사용되며, 실시간 게임, 채팅 앱 등 다양한 분야에서 활용되고 있습니다.
오늘은 Unity 모바일 앱과 웹 간의 소켓 통신을 어떻게 구현할 수 있는지에 대해 알아보겠습니다.
1. 소켓 통신이란?
소켓 통신은 프로그래밍에서 네트워크를 통해 데이터를 전송하기 위해 사용되는 방식입니다. 이는 클라이언트와 서버 간의 연결을 통해 이루어지며, 데이터를 패킷 형태로 주고받습니다. 소켓은 IP 주소와 포트 번호로 구성되며, 이 조합을 통해 서로 다른 장치 간의 통신이 가능하게 되는 것입니다.
2. 소켓 통신의 특징
소켓 통신의 가장 큰 특징은 실시간입니다. 데이터가 전송되면 거의 즉시 상대방에게 전달될 수 있기 때문에, 사용자가 느끼는 반응 속도가 매우 빠르다.
또한, 소켓 통신은 지속적인 연결 상태를 유지할 수 있어, 연결이 끊기지 않는 한 데이터를 계속 주고받을 수 있다.
3. 소켓 통신의 장단점
소켓 통신의 장점
- 실시간 데이터 전송 : 사용자가 요청한 정보가 거의 즉시 전달
- 지속적인 연결 : 클라이언트와 서버 간의 연결이 유지되므로, 데이터 전송이 끊기지 않아야 하는 경우에 유리
- 다양한 프로토콜 지원 : TCP/IP와 UDP 등 다양한 프로토콜을 지원, 상황에 따라 적합한 프로토콜을 선택이 가능
소켓 통신의 단점
- 복잡한 구현 : 실시간 데이터 전송이기 떄문에 다양한 예외 처리와 오류 관리를 확실히 해야 한다.
- 네트워크 의존성 : 네트워크 상태에 따라 통신 품질이 달라질 수 있다.
- 보안 문제 : 데이터를 암호화하지 않으면 해커가 통신 내용을 가로챌 위험이 있다. 보안을 강화하는 추가적인 작업이 필요!
4. 예제
** BestHTTP.SocketIO를 활용하여 서버와 클라이언트 간의 통신을 구현한 예제
(1) SocketIOManager: 서버와 연결하고 메시지 주고받기
using BestHTTP.SocketIO;
using UnityEngine;
public class SocketIOManager : MonoBehaviour
{
private SocketManager socketManager;
private Socket socket;
public void ConnectToServer(string serverUri)
{
var options = new SocketOptions
{
ConnectWith = TransportTypes.WebSocket // WebSocket 사용
};
socketManager = new SocketManager(new Uri(serverUri), options);
socket = socketManager.Socket;
socket.On("connect", OnConnected);
socket.On("disconnect", OnDisconnected);
socket.On("message", OnMessageReceived);
socketManager.Open();
}
private void OnConnected(Socket socket, Packet packet, object[] args)
{
Debug.Log("Connected to server");
}
private void OnMessageReceived(Socket socket, Packet packet, object[] args)
{
if (args.Length > 0)
{
Debug.Log("Received: " + args[0].ToString());
}
}
private void OnDisconnected(Socket socket, Packet packet, object[] args)
{
Debug.Log("Disconnected from server");
}
public void SendMessageToServer(string message)
{
if (socketManager.State == SocketManager.States.Open)
{
socket.Emit("chatMessage", message);
Debug.Log("Message sent: " + message);
}
else
{
Debug.LogWarning("Socket is not connected.");
}
}
public void CloseConnection()
{
if (socketManager != null)
{
socketManager.Close();
Debug.Log("Connection closed.");
}
}
}
(2) CounselorNPC: 소켓과 간단한 상호작용
using UnityEngine;
public class CounselorNPC : MonoBehaviour
{
private SocketIOManager socketManager;
void Start()
{
socketManager = FindObjectOfType<SocketIOManager>();
socketManager.ConnectToServer("ws://yourserverurl");
}
public void SendMessage(string message)
{
socketManager.SendMessageToServer(message);
}
public void OnApplicationQuit()
{
socketManager.CloseConnection();
}
}
간단하게 사용한 예제인데 다음 글에서는 해당 코드들을 조금 더 자세하게 정리해보자
반응형
'Unity 개발 > 기술 향상' 카테고리의 다른 글
[Unity] 깔끔한 코드 작성을 위한 스타일 가이드 (1) (1) | 2024.10.26 |
---|---|
[Unity] Google STT (Speechs-To-Text) 적용 해보기 (0) | 2024.10.25 |
[Unity] DLL 만들기 (2) (1) | 2024.10.21 |
[Unity] DLL 만들기 (1) (1) | 2024.10.21 |
[Unity Error] 'Assets/ExternalDependencyManager/Editor/1.2.183/Google.IOSResolver.dll' will not be loaded due to errors:Unable to resolve reference 'UnityEditor.iOS.Extensions.Xcode'. (4) | 2024.10.14 |