소개
게시글
질문&답변
2020.07.06
TCP Remote Access 관련 질문입니다.
질문이 많았는데, 모두 답변해주셔서 감사합니다. 어쩌면 실례가 될 수도 있는 질문들이였는데, 늦게나마 죄송하다는 말씀드리고 또 감사드린다는 말씀도 함께 드립니다. 좋은 강의 제공해주셔서 감사해요! 다음번 강의도 구매하도록 하겠습니다!
- 0
- 5
- 273
질문&답변
2020.07.03
TCP Remote Access 관련 질문입니다.
몇 가지만 더 추가로 여쭤보고싶은게 있어서 답글로 더 등록해봅니다! 서버 띄어놓고 외부단말 3개정도 접속해보니 메모리가 금방 100MB 이상을 넘어가버리길래 메모리 스냅샷을 떠보니 아래 클래스들에서 메모리가 계속 쌓이는 것을 확인했어요. 1. SendBufferHelper => ArraySegment 2. ServerPacketManager => ArraySegment 그래서 코드를 아래처럼 바꾸었더니, 메모리는 계속 증가하지 않는 것 같은데 GC가 되게 빈번하게 일어나고 있어요. 1. SendBufferHelper public static ArraySegment Open(int reserveSize) { if (CurrentBuffer == null) // 추가 CurrentBuffer = new ThreadLocal(() => null); // 추가 ... return CurrentBuffer.Value.Open(reserveSize); } public static ArraySegment Close(int usedSize) { ArraySegment buffer = CurrentBuffer.Value.Close(usedSize); CurrentBuffer.Value = null; // 추가 CurrentBuffer = null; // 추가 return buffer; } 2. ServerPacketManager public void OnRecvPacket(PacketSession session, ArraySegment buffer, Action onRecvCallback = null) { ... Func, IPacket> func = null; if (_makeFunc.TryGetValue(packetId, out func) ) { IPacket packet = func.Invoke(session, buffer); buffer = null; // 추가 if (onRecvCallback != null) onRecvCallback.Invoke(session, packet); else HandlePacket(session, packet); } } 이렇게 하는 것이 맞을지 아니면 원 상태대로 유지해도 좋을지 의견 부탁드려요!
- 0
- 5
- 273
질문&답변
2020.07.03
TCP Remote Access 관련 질문입니다.
Server /Listener에 있는 IPEndPoint 생성자의 첫 번째 인자의 의미를 잘 몰랐었는데 찾아보니 허용 IP 목록이라고 하더라고요. host의 값이 Dns.GetHostName() 은 Local의 주소를 반환하니 로컬에서만 접속이 가능했던것이였습니다. 이걸 IPAddress.Any로 바꿔주니 우선 외부 기기에서는 잘 실행되는 것을 확인했는데 반대로 유니티에서 접속이 안되더라고요. 정확한 이유는 잘 모르겠지만 확인한 바로는 string host = Dns.GetHostName(); // Local PC 의 Host Name IPHostEntry ipHost = Dns.GetHostEntry(host); IPAddress ipAddress = ipHost.AddressList[0]; ipAddress의 값이 ip가 아닌 LocalPC의 이름으로 반환되는 것을 확인했습니다. 그래서 ipHost.AddressList 배열에 있는 값이 무엇이 있나 찾아보니 LocalPC의 이름이 0번 인덱스에있고 IP가 1번 인덱스에 있는 것을 확인했어요. 인덱스가 고정되어 들어온다는 보장도 없을 것 같아서 아래코드로 바꿔봤습니다. //string host = Dns.GetHostName(); // Local PC 의 Host Name string host = "192.168.0.40"; IPHostEntry ipHost = Dns.GetHostEntry(host); IPAddress ipAddress = null; foreach (IPAddress address in ipHost.AddressList) { if(address.ToString().Contains(".")) // IP 형식인지 확인 ipAddress = address; Debug.Log($"Address : {ipAddress}"); } IPEndPoint endPoint = new IPEndPoint(ipAddress, 17654); // 최종 주소 코드를 위 처럼 바꿨더니 잘 접속이 되는것을 확인했습니다. 서버쪽에서는 어떤 단말이든 접속 가능하도록 열어 두었는데 IP로만 접속이 가능한 구조로 보이는데 이런 현상에는 특별한 이유가 있는 것인가요?
- 0
- 5
- 273
질문&답변
2020.07.01
캐스팅 질문 드려요.
감사합니다!!!!!!
- 3
- 4
- 258
질문&답변
2020.07.01
GameRoom 관련 질문입니다.
아, GameRoom 코드내에 있네요. 정신없이 작성하다보니 놓쳤던 부분입니다. 전부다 해결되었어요!!!!
- 0
- 2
- 421