이 프로젝트는 Socket.IO 서버의 오픈 소스 Java 구현입니다. Netty 서버 프레임워크를 기반으로 합니다.
Apache License 2.0에 따라 라이센스가 부여됩니다.
JAR은 Java 8과 호환되지만 모듈 정보를 빌드하려면 Java 11 이상이 필요합니다.
종속성 목록에 다음을 포함합니다.
< dependency >
< groupId >com.corundumstudio.socketio</ groupId >
< artifactId >netty-socketio</ artifactId >
< version >2.0.12</ version >
</ dependency >
2012년 고객 피드백:
VM에서 실행되는 CentOS, CPU 1개, 4GB RAM: CPU 10%, 메모리 15%
6000 xhr 길이의 폴링 세션 또는 15000 웹소켓 세션
초당 4000개의 메시지
2014년 고객 피드백:
"솔루션의 스트레스 테스트를 위해 우리는 30,000개의 동시 웹소켓 클라이언트를 실행했으며 평균 지연 시간이 1초 미만으로 초당 총 약 140,000개의 메시지를 처리할 수 있었습니다." (c) Viktor Endersz - Kambi 스포츠 솔루션
멀티플레이어 오케스트라: multiplayer-orchestra.com
AVOS 클라우드: avoscloud.com
Kambi 스포츠 솔루션: kambi.com
ARSnova: arsnova.eu
기능 - 활성화Cors 설정이 추가됨(@zd925 덕분에)
기능 - http 요청 디코더를 정의하는 기능(@gurkancakir 덕분에)
수정됨 - 시간 초과 트리거 이후 ack가 반환되면 IllegalStateException이 발생합니다(@malinGH 덕분에).
수정됨 - 클라이언트가 네임스페이스에 반복적으로 연결하는 것을 방지합니다(@bigtian99 덕분에).
수정됨 - 기본적으로 첨부 파일을 바이너리로 처리합니다(@nicsor 덕분에).
수정됨 - 복구 가능한 핸드셰이크 실패 처리(@berinhardt 덕분에)
수정됨 - HashedWheelTimeoutScheduler는 작업 실행 전에 ScheduledFutures를 제거해야 합니다(@berinhardt 덕분에).
수정됨 - 사용자 정의 네임스페이스가 인증 데이터를 지원합니다(@Addi 덕분에)
수정됨 - 첨부 파일 프레임 버퍼 읽기
수정됨 - WebSocketServerHandshakeException 또는 채널이 실패하는 동안 메모리 누수(@h3mant-1 덕분에)
기능 - 하나의 HTTP 폴링 본문에서 여러 메시지의 v3/v4 구문 분석(@unverbraucht 덕분에)
수정됨 - IllegalReferenceCountException 오류
수정됨 - 첨부 파일 구문 분석으로 인해 발생할 수 있는 OOM
@liangyuanpeng이 만든 Github 작업 지원
기능 - Java 모듈 지원(@unverbraucht 덕분에)
기능 - AuthTokenListener가 추가되었습니다(@unverbraucht 덕분에)
기능 - 다중 패킷 구분자 지원(@unverbraucht 덕분에)
개선 - 연결 끊김 시 여러 나가기 이벤트 대신 대량 나가기 이벤트 보내기(@ksahu750에게 감사)
수정됨 - ack 응답 시간 초과 중 NPE(@BlueSodaWater 덕분에)
수정됨 - readVersion() 메서드의 리소스 누수(@JHOANG23 덕분에)
기능 - 인증 중에 소켓 저장소에 키-값 쌍을 추가할 수 있는 가용성이 추가되었습니다(@shutuper 덕분에).
기능 - 룸 varargs 매개변수가 있는 getRoomOperations() 메소드(@shutuper 덕분에)
수정됨 - 클라이언트가 기본이 아닌 네임스페이스에 연결할 수 없음(@lyjnew 덕분에)
수정됨 - WebSocketTransport 및 PollingTransport의 NPE(@Hunterk95 덕분에)
JDK 8은 사용에 필요한 최소 버전입니다.
수정됨 - maxFramePayloadLength보다 큰 메시지로 인해 메모리 누수가 발생함
기능 - SocketIO 4.x 프로토콜 지원(@HashZhang 덕분에)
수정됨 - 모든 소켓오 관련 클래스를 번들에 추가합니다(@rishabhgup 덕분에)
수정됨 - io.netty.channel.ChannelPipelineException 오류
기능 - SocketIOClient.isWritable() 메서드가 추가되었습니다(@xuwenqing04에게 감사드립니다).
기능 - Namespace.addListeners(반복 가능한 리스너) 메서드가 추가되었습니다(@damonxue에게 감사드립니다).
수정됨 - 연결 해제 이벤트 패킷은 MESSAGE의 하위 유형이어야 합니다(@MasterShi에게 감사드립니다).
수정됨 - BaseStoreFactory에서 NPE가 발생함
기능 - 대량 가입 및 탈퇴 지원 추가(@ksahu750님께 감사드립니다)
수정됨 - 자동 연결 끊김(1.7.22 이후 회귀)
기능 - Socketio v4 프로토콜에 대한 핑/퐁 지원(@HashZhang 덕분에)
수정됨 - 전송 이름을 대문자로 확인해야 함(1.7.20 이후 회귀)
기능 - needClientAuth 설정이 추가되었습니다(@huws 덕분에)
수정됨 - 페이로드 > maxFramePayloadLength인 경우 ContinuationWebSocketFrame을 사용해야 합니다(俞伟搏 덕분에).
수정됨 - 이벤트 리스너 src 클래스와 대상 bean이 일치하지 않습니다(@cifaz 덕분에)
수정됨 - 잘못된 전송 매개변수(@mirus36 덕분에)
기능 - writeBufferWaterMarkLow 및 writeBufferWaterMarkHigh 설정이 추가되었습니다(@xuminwlt 덕분에)
기능 - AllowHeaders 설정이 추가되었습니다(@HuangHuan 덕분에)
기능 - getCurrentRoomSize() 메서드 추가됨(@sunxiaoyu3 덕분에)
수정됨 - 네임스페이스 버그(@@johntyty912 덕분에)
수정됨 - redisson이 있는 여러 노드가 동일한 메시지를 받음(梁嘉祺 덕분에)
수정됨 - 여러 노드가 클라이언트 연결 해제 시 LEAVE 메시지를 하나만 수신합니다(@GaryLeung922에게 감사드립니다).
기능 - 모든 이벤트를 포착하는 이벤트 인터셉터 지원(@yosiat 덕분에)
수정됨 - 네임스페이스 이벤트 방송(Volodymyr Masliy 덕분에)
기능 - Config 객체에 RandomSession 설정이 추가되었습니다(@yuanxiangz 덕분에)
수정됨 - WebSocketTransport의 NPE
수정됨 - NPE 및 메모리 누수(zhaolianwang 덕분에)
수정됨 - 네임스페이스 구문 분석(Redliver 덕분에)
수정됨 - Redisson 3.9+ 호환성
수정됨 - 스레드로부터 안전하지 않은 ACK 처리(@dawnbreaks 덕분에)
수정됨 - 비활성 긴 폴링 채널로 인해 메모리 누수가 발생함(@dawnbreaks 덕분에)
수정됨 - websocket CloseFrame 처리(@hangsu.cho 덕분에)
수정됨 - WebSocketTransport NPE
수정됨 - 세션 ID가 더 이상 고유하지 않습니다.
수정됨 - 핑 시간 초과 시 기본 연결이 닫히지 않는 문제 수정
수정됨 - "fin_close" 문제
기능 - 연결을 위한 로컬 소켓 주소 추가(@SergeyGrigorev 덕분에)
기능 - addPingListener
메소드 추가됨(@lovebing 덕분에)
기능 - HashedWheelTimer용 ThreadFactory 추가(@hand515 덕분에)
수정됨 - SO_LINGER가 하위 채널(서버 채널이 아님) 옵션으로 처리되도록 변경되었습니다(@robymus 덕분에).
수정됨 - 바이너리 첨부 파일을 사용하는 경우 ByteBuf 누출
수정됨 - 쿠키에서 세션 복원(@wuxudong 덕분에)
수정됨 - b64가 부울 값일 때 NumberFormatException 발생(@vonway 덕분에)
수정됨 - 폴링 전송을 위한 데이터 인코딩
기능 - 구성을 사용하여 SSL KeyFactoryAlgorithm을 변경하는 옵션이 추가되었습니다(@robymus 덕분에).
개선 - 바이너리 승인 처리 개선(Sergey Bushik에게 감사드립니다)
수정됨 - Promise가 이미 성공했기 때문에 Promise를 성공으로 표시하지 못했습니다(@robymus에게 감사드립니다).
기능 - SocketIOServer.removeAllListeners
메서드가 추가되었습니다.
기능 - excludedClient
매개변수가 추가된 BroadcastOperations.sendEvent
메서드
개선 - Redisson이 2.4.0으로 업데이트되었습니다.
수정됨 - 네임스페이스 개체의 메모리 누수(@CrazyIvan007 덕분에)
수정됨 - 전송이 지원되지 않는 경우 오류 발생
수정됨 - 폴링 사용 시 클라이언트 연결 끊김 - IndexOutOfBoundsException
수정됨 - netty가 4.1.0.CR3 버전으로 업데이트됨
수정됨 - 바이너리 패킷 구문 분석(Winston Li 덕분에)
기능 - 압축 지원
수정됨 - DotNET 클라이언트 요청 처리
고정 - 패킷 길이 형식 구문 분석
수정됨 - 패킷에서 'd='를 건너뛰는 문제
수정됨 - 폴링 클라이언트가 산발적으로 조기에 연결이 끊어지는 현상(lpage30 덕분에)
수정됨 - 서버 close
패킷을 보낸 경우 연결이 영원히 열려 있습니다.
수정됨 - Redisson 최신 버전과의 호환성
개선 - 이제 WebSocketServerHandshaker.allowExtensions
true
입니다.
개선 - SessionID 쿠키 구현(@ryandietrich에게 감사드립니다)
수정됨 - clientRooms 누출(@andreaspalm 덕분에)
수정됨 - JSON 구문 분석 오류에 ExceptionListener가 사용되지 않음
수정됨 - "자동 채널" 공격
개선 - 웹소켓 패킷 엄격한 순서를 위해 useStrictOrdering
매개변수가 추가되었습니다.
개선 - FAIL_ON_EMPTY_BEANS = false
옵션이 설정됨
개선 - 자체 JsonSupport impl을 사용하는 경우 jackson lib를 추가할 필요가 없습니다.
수정됨 - SocketIO 클라이언트 1.3.x 지원
수정됨 - 문자 세트 인코딩 처리(alim-akbashev 덕분에)
개선 - SocketIONamespace.getName()
이 추가되었습니다.
수정됨 - WebSocket 프레임 집계
수정됨 - WebSocket 버퍼 릴리스
수정됨 - Unexpected end-of-input in VALUE_STRING
수정됨 - 원본 헤더가 있는 요청에 대해 Access-Control-Allow-Credentials가 TRUE입니다.
기능 - Configuration.sslProtocol
매개변수가 추가되었습니다.
수정됨 - BinaryEvent ack 처리
수정됨 - BinaryEvent 비 b64 인코딩/디코딩
수정됨 - 패킷 인코딩 중 버퍼 누출
고정 - 패킷 인코딩
수정됨 - BinaryEvent 인코딩/디코딩
고정 - 문제가 없는 연결 처리
기능 - origin
설정 추가
기능 - crossDomainPolicy
설정이 추가되었습니다.
기능 - SocketIOServer.startAsync
메서드가 추가되었습니다.
기능 - Epoll 지원
개선 - BinaryEvent 지원
수정됨 - SocketIOClient 연결 해제 처리
수정됨 - 브로드캐스트 콜백
수정됨 - NPE 이후 인증 중에 전송이 정의되지 않음
수정됨 - 폴링 전송에 대한 핑 시간 초과
수정됨 - PacketEncoder의 버퍼 누수
수정됨 - 웹소켓 전송을 사용하는 잘못된 발신 메시지 인코딩
수정됨 - 웹소켓 전송의 NPE
수정됨 - 폴링 전송의 다중 패킷 디코딩
수정됨 - 버퍼 누출
기능 - Configuration.origin을 통해 사용자 정의 Access-Control-Allow-Origin
설정하는 기능
수정됨 - CLI 소켓.io-client를 통한 연결
기능 - Socket.IO 1.0 프로토콜 지원. 새로운 프로토콜 덕분에 디코딩/인코딩 속도가 향상되었습니다.
삭제됨 - SocketIOClient.sendMessage
, SocketIOClient.sendJsonObject
메서드 및 해당 리스너
삭제됨 - Flashsocket 전송 지원
삭제됨 - 프로토콜 버전 0.7 ... 0.9.16
개선 사항 - 단일 패킷 인코딩이 최적화되었으며 주로 WebSocket 전송에 사용됩니다. 인코딩 시간 최대 40% 단축(Viktor Endersz 덕분에)
개선 - 회의실 처리 최적화
개선 - ExceptionListener.ExceptionCaught 메소드가 추가되었습니다.
주요 API 변경 - Configuration.autoAck가 ackMode로 대체되었습니다.
기능 - trustStore 설정이 추가되었습니다.
기능 - maxFramePayloadLength 설정이 추가되었습니다.
기능 - SocketIONamespace에 getAllClients 및 getClient 메서드가 추가되었습니다.
수정됨 - SocketIOServer.getAllClients가 잘못된 클라이언트 금액을 반환함
수정됨 - 메시지 릴리스 문제
수정됨 - 예외 리스너 구성 재정의 관련 문제
주요 API 변경 - 이제 DataListener.onData에서 예외가 발생합니다.
개선 사항 - 예외 리스너에 데이터 매개변수가 추가되었습니다.
개선 - 소켓 구성 설정 기능
개선 - Configuration.autoAck 매개변수 추가
수정됨 - 클라이언트 연결 해제 중 AckCallback 처리
수정됨 - 무단 핸드셰이크 HTTP 코드가 401로 변경됨
주요 API 변경 - Configuration.heartbeatThreadPoolSize 설정이 제거됨
기능 - SpringAnnotationScanner 를 통해 주석이 달린 Spring Bean 지원
기능 - 공통 예외 수신기
개선 - ScheduledExecutorService가 HashedWheelTimer 로 대체됨
수정됨 - 잘못된 네임스페이스 클라이언트 연결 해제 처리
수정됨 - onConnect/onDisconnect/isAuthorized 메서드의 예외로 인해 서버가 중단됩니다.
API 변경 중단 - SocketIOClient.sendEvent 메서드 서명이 변경됨
개선 - MultiTypeEventListener 및 OnEvent 주석을 통한 다중 유형 이벤트 지원
개선 - MultiTypeAckCallback을 통한 다중 유형 이벤트 응답 지원
개선 - SocketIOClient.getHandshakeData 메소드 추가
개선 - Jedis가 Redisson으로 대체되었습니다.
수정됨 - JDK 1.6+ 호환성
기능 - 인증 지원
수정됨 - XHR 풀링 전송 회귀
수정됨 - Websocket 전송 회귀
수정됨 - PacketHandler의 네임스페이스 NPE
수정됨 - 서버 중지 중에 실행 프로그램이 종료되는 문제
기능 - 클라이언트 스토어(Memory, Redis, Hazelcast) 지원
기능 - netty-socketio 노드(Redis, Hazelcast) 지원을 통한 분산 브로드캐스트
기능 - OSGi 지원(rdevera 덕분에)
개선 - XHR 풀링 최적화
개선 - SocketIOClient.getAllRooms 메소드가 추가되었습니다.
수정됨 - 페이지를 다시 로드한 후 플래시 정책 "요청 누출"(ntrp 덕분에)
수정됨 - websocket swf 로딩(ntrp 덕분에)
수정됨 - 잘못된 URL로 인해 DDoS가 발생할 수 있음
수정됨 - 직접 사용을 방지하기 위해 Event.class 패키지 표시 여부가 변경되었습니다.
개선 - 단순화된 Jackson 모듈 등록
수정됨 - 종료 중 NPE
개선 - 네임스페이스에 isEmpty 메소드 추가
수정됨 - 잘못된 승인 시간 초과 콜백 호출
수정됨 - JSON에 대한 bigdecimal 직렬화
수정됨 - 패킷 처리 예외 중 무한 루프
수정됨 - '클라이언트를 찾을 수 없음' 처리
개선 - 인코딩 버퍼 할당 최적화.
개선 사항 - 이제 GC 부담을 줄이기 위해 인코딩 버퍼가 메모리에 풀링됩니다(netty 4.x 기능).
수정됨 - 역직렬화 중 알 수 없는 속성에 대한 오류가 발생했습니다.
수정됨 - 긴 폴링 전송에서 메모리 누수가 발생했습니다.
개선 - 인바운드 데이터로 오류 정보를 기록합니다.
첫 번째 안정 릴리스.