Skip to content

rlaisqls/kotlin-netty-socketio

Repository files navigation

gribouille

kotlin으로 netty socketio 라이브러리를 구현 및 개선해보는 프로젝트입니다.

목표

  • netty 라이브러리를 직접 사용해봄으로써 낮은 추상화 수준의 자바 네트워킹 경험해보기
  • kotlin coroutine을 활용하여 최적화하기
    • Coroutine을 사용했을 때 Continuation으로 인해 메모리를 더 많이 사용하기에 대용량 트래픽 처리시 Netty의 순수한 NIO보다 성능이 떨어지는 것으로 판단되어 진행하지 않았습니다. (artillery로 부하 생성 및 intellij Profiling tools로 JVM, 스레드 모니터링)
  • 클래스간 복잡한 의존성을 가지고 있는 기존 아키텍처 개선하기 -> object 기반 싱글톤 구조로 변경

class diagram

DisconnectableHub

배운점 정리

netty

netty로 구성되어있는 코드의 전체 구조를 이해하고, 비동기 처리를 위한 스레드 동작을 파악하기 위해 netty framework에 대해 공부하였습니다.

varience

다양한 타입의 제네릭을 가질 수 있는 DataListener<T>List<DataListener<*>>로 저장한 후 꺼내왔을 때, kotlin에선 class를 알 수 없어 Nothing으로 표기되는 문제가 발생했습니다. 이를 통해 <*><?>의 차이점과 Mixed-Site Variance 등 다양한 공변성 방식이 있음을 알게 되었습니다.

coroutine

참고 자료

About

kotlin으로 netty socketio 라이브러리를 구현 및 개선해보는 프로젝트입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages