iyOmSd/Title: Swift

[Swift] Socket 라이브러리 비교 CocoaAsyncSocket vs Socket.IO

냄수 2020. 12. 23. 15:59
반응형

대표적인 소켓 라이브러리에요 (아마도..?)

 

소켓을 사용할 때 원하는 기능을 고려해서 선택해서 쓰면 될것 같아요

 

소켓이란.. 간단하게

HTTP통신은 클라이언트가 요청을 보내는 경우에만 응답하는 단방향 통신이고

실시간연결이아니라 필요할 때만 통신해서 데이터를 가져오는 방식이죠

 

소켓은 특정 Port를 통해서 연결을 유지하고 실시간으로 양방향 통신을 할 수 있는 방식이에요

실시간통신에 유리하죠

 

일반적인 소켓은 TCP/IP, UDP 프로토콜을 이용하지만

웹소켓은 HTTP Layer에서 작동하는 소켓이에요
기본적으로 HTTP(80), HTTPS(443)포트를 사용하구요

웹소켓 프로토콜은 WS, WSS가 있어요

 

 

CocoaAsyncSocket

Objective-C로 구성되어 있고

GCD기반 비동기 소켓 라이브러리에요

thread-safe하구요

Delegate패턴으로 이벤트를 관리할 수 있도록 지원해주고

큐가 읽거나 쓸때 블락되지않고 스트림이 자동으로 처리 되구요

TCP/UDP 연결을 지원해요

클라이언트, 서버 모두 구현가능해요

 

 

애플에서 제공되는 소켓을 쓰는것 같더라구요

CFSocket..!

 

CFSocket이 아마도 우리들이 사용하는 소켓일거에요

직접 사용하기엔 CF... Core Foundation.. 너무 low level이라 어렵기 때문에

당연히 사용하기 쉽게 랩핑 해놓은 클래스들이 있겠죠

NSStreamCFStream

 

NSStream - Objective-C

 

CFStream - C로 구현

CFSocket을 이용해서 하는 통신...

 

NSStream클래스는 iOS의 원격 호스트에 연결하는 것을 지원하지 않지만, CFStream이 지원해주기때문에

CFStream API로 스트림을 만들고 NSStream로 bridge를(비용x) 이용해서 캐스팅 할 수 있다고하네요..

CFStream -> NSStream으로 변환해서 이용 할 수 있다는거에요

CFStream은 C로구현되서 복잡하고 어려울 수도 있기때문에 (API문서를 보면.. 확느껴져요)

사용하기편한 NSStream으로 사용하구요 확장할 수도 있어요

 

NSStream 문서를 보면 간단해보이고 실제구현도 간단해요

그럼에도 라이브러리를 사용하는 이유는

비동기처리를 신경안써두되는 것과

이벤트처리(handler)를 정의해둬서 사용하기만 한다는 장점이 있을 것 같아요

 

웹소켓과 TCP/IP소켓을 만드는게 좀 다를 줄 알고 찾아봤는데.. 안 나오더라구여... 생각해보니..

소켓을 통해서 데이터를 교환하죠

URL로 웹을 통해 연결을 하면 웹소켓이 되고

(웹소켓 연결을 하겟다는 헤더를 포함한 요청을 통해서 서버에서 클라이언트와 계속 연결상태를 유지)

로컬에서 어플리케이션끼리 연결된다면 TCP/IP가 될 것 같네요

 

내용에 이상이있다면 알려주세요... ㅠ

 

 

사용후기

소켓이 연결되면 바로 Disconnect되는 현상이 있더라구요..?

해결하지못해서 결국 쓰진못햇지만... ㅠ

서버와 클라이언트 모두 구현가능하지만 좀더 깊게 공부해서 다른 처리를 해줘야할 것같아요

레퍼런스도 많이없어서 처음할때 힘든 라이브러리에요

 

 

Socket.IO(socket.io-client-swift)

유명한 웹 소켓 프레임워크에요

이 라이브러리는 각 플랫폼에 특화된 소켓같아요

다른 언어들도 지원해주기 때문에 다른 클라이언트, 서버에서 같이 사용해서

규칙을 만들어 같이 구현하기에 편리한 것 같아요

문서가 잘정리되어 있어서 참고하면서 간단하게 구현할 수 있어요

CocoaAsyncSocket보다 파일량이 더 많더라구요

다른 라이브러리에도 의존하구있구요

이벤트를 보낼때 이름을 달아서보낼 수 있어요

클라이언트만 구현가능해요

사용후기

간단하고 원하는 이벤트명으로 데이터를 가져올 수 있어요 편리하죠

누구나 쉽게 레퍼런스를 보면서 따라할 수 있어서

위에서 언급한 CocoaAsyncSocket보다는 쉽게 사용할 수 있을 것 같아요

 

 

두 라이브러리의 차이점으론

CocoaAsyncSocket vs Socket.IO

구현: delegate위주 vs 클로져위주 

용량: 비교적 적은 파일 vs 비교적 많은 파일(다른 라이브러리 의존)

문서: 참고레퍼런스 부족 vs 참고 문서 많음

접근성: Swift특화 vs 모든 플랫폼

데이터: 비트단위 vs 원하는 이벤트명을 달아서 데이터 전송가능

 

SocketiO를 사용할 땐 Room이라는 개념을 사용하는데

2019/12/13 - [iyOmSd/Title: Swift] - [Swift] Socket.IO를 이용한 소켓통신 채팅앱 만들어보기 (1/3)

경로와 같은 개념이여서 차이라곤 할 순없지만 사용법의 차이도 있겠네요

 

두 라이브러리 모두 웹소켓도되고 TCP/IP 소켓도 되는데..

비교하실때 그나마 참고가 되었으면 하네요 ㅎㅎ..

 

저는 개인적으로 Socket.io를 추천!

반응형