brainstate

mrniko/netty-socketio · source

Snapshot 0 · 2026-11-04T12:47:22Z · Java · Apache-2.0

Content fingerprint488acf5d572598584a3731bba6d0843f3c931a93ee0e4a2c270fc87396582ed5

GitHub description at capture

Socket.IO server implemented on Java. Realtime java framework

README at capture

Netty-socketio Overview
===
This project is an open-source Java implementation of [Socket.IO](http://socket.io/) server. Based on [Netty](http://netty.io/) server framework.  

Licensed under the Apache License 2.0.


Features
================================
* __1.x - 4.x__ version of [Socket.IO-client](https://github.com/socketio/socket.io) is supported
* Supports xhr-polling transport  
* Supports websocket transport  
* Supports namespaces and rooms  
* Supports ack (acknowledgment of received data)  
* Supports SSL  
* Supports client store ([Redisson](https://redisson.pro), Hazelcast, Memory)  
* Supports distributed broadcast across netty-socketio nodes ([Redisson](https://redisson.pro), Hazelcast)  
* Supports OSGi  
* Supports Spring  
* Contains Java module info for JPMS. 
* Lock-free and thread-safe implementation  
* Declarative handler configuration via annotations  

JAR is compatible with Java 8 but needs Java 11+ for building the module-info.

### Maven 

Include the following to your dependency list:
```xml
    <dependency>
     <groupId>com.corundumstudio.socketio</groupId>
     <artifactId>netty-socketio</artifactId>
     <version>2.0.13</version>
    </dependency>
```

Performance
================================

Customer feedback in __2012__:  
CentOS, 1 CPU, 4GB RAM runned on VM: 
CPU 10%, Memory 15%  
6000 xhr-long polling sessions or 15000 websockets sessions  
4000 messages per second  


Customer feedback in __2014__:  
"To stress test the solution we run 30 000 simultaneous websocket clients and managed to peak at total of about 140 000 messages per second with less than 1 second average delay." (c) Viktor Endersz - Kambi Sports Solutions

Projects using netty-socketio
================================
Multiplayer Orchestra: [multiplayer-orchestra.com](https://multiplayer-orchestra.com/)  
AVOS Cloud: [avoscloud.com](https://avoscloud.com/)  
Kambi Sports Solutions: [kambi.com](http://kambi.com/)  
ARSnova: [arsnova.eu](https://arsnova.eu)  

Recent Releases
================================
#### Please Note: trunk is current development branch.

#### 19-Mar-2025 - version 2.0.13 released

Fixed - Socket.IO Client v2 fails to connect (thanks to @penguinlab)  
Fixed - Support for v1 / readNamespace. V1 namespace is without special characters , or ? (thanks to @Pacl0)  

#### 01-Nov-2024 - version 2.0.12 released

Feature - enableCors setting added (thanks to @zd925)  
Feature - ability to define http request decoder (thanks to @gurkancakir)  

Fixed - if ack returns after the timeout trigger ,a IllegalStateException will be thrown (thanks to @malinGH)  
Fixed - prevents the client from repeatedly connecting to the namespace (thanks to @bigtian99)  
Fixed - treat attachments as binary by default (thanks to @nicsor)  
Fixed - recoverable handshake failure handling (thanks to @berinhardt)  
Fixed - HashedWheelTimeoutScheduler should remove scheduledFutures before task execution (thanks to @berinhardt)  

#### 25-Jul-2024 - version 2.0.11 released

Fixed - custom namespaces support auth data (thanks to @Addi)  
Fixed - attachments frame buffer reading  
Fixed - memory leak while WebSocketServerHandshakeException or Channel failed (thanks to @h3mant-1)

#### 01-Mar-2024 - version 2.0.9 released

Feature - v3/v4 parsing of multiple messages in one HTTP polling body (thanks to @unverbraucht)

Fixed - IllegalReferenceCountException error

#### 24-Jan-2024 - version 2.0.8 released

Fixed - possible OOM caused by attachments parsing

#### 23-Jan-2024 - version 2.0.7 released

Github Actions support made by @liangyuanpeng

Feature - Java module support (thanks to @unverbraucht)  
Feature - AuthTokenListener added (thanks to @unverbraucht)  
Feature - multi-packet separator support (thanks to @unverbraucht)  

Improvement - Send Bulk leave event instead of multiple leave events on disconnect (thanks to @ksahu750)  

Fixed - NPE during ack response timeout (thanks to @BlueSodaWater)  
Fixed - Resource Leak in readVersion() method (thanks to @JHOANG23)

#### 24-Oct-2023 - version 2.0.6 released

Feature - added availability to add key-value pairs to socket store during authorization (thanks to @shutuper)  
Feature - getRoomOperations() method with room varargs param (thanks to @shutuper)  

#### 01-Jul-2023 - version 2.0.3 released
Fixed - client can't connect to non-default namespace (thanks to @lyjnew)

#### 17-May-2023 - version 2.0.2 released
Fixed - NPE in WebSocketTransport and PollingTransport (thanks to @Hunterk95)

#### 14-May-2023 - version 2.0.1 released 
JDK 8 is minimum version required for usage. 

Fixed - message larger than maxFramePayloadLength causes memory leak  

#### 14-May-2023 - version 2.0.0 released 
Feature - SocketIO 4.x protocol support (thanks to @HashZhang)  

Fixed - add all the socketio specific classes to bundles (thanks to @rishabhgup)  

#### 17-Apr-2023 - version 1.7.25 released  
Fixed - io.netty.channel.ChannelPipelineException error

#### 14-Apr-2023 - version 1.7.24 released  
Feature - SocketIOClient.isWritable() method added (thanks @xuwenqing04)  
Feature - Namespace.addListeners(Iterable<L> listeners) method added (thanks @damonxue)  

Fixed - disconnect event packet should be a subtype of MESSAGE (thanks @MasterShi)  
Fixed - BaseStoreFactory throws NPE  

#### 02-Feb-2023 - version 1.7.23 released  
Feature - Added support for bulk join and leave (thanks @ksahu750)

Fixed - auto disconnected (regression since 1.7.22)

#### 22-Sep-2022 - version 1.7.22 released  
Feature - ping/pong support for socketio v4 protocol (thanks to @HashZhang)

#### 06-Aug-2022 - version 1.7.21 released  
Fixed - transport name should be checked in uppercase (regression since 1.7.20)

#### 26-Jul-2022 - version 1.7.20 released  
Feature - needClientAuth setting added (thanks to @huws)

Fixed - ContinuationWebSocketFrame should be used if payload > maxFramePayloadLength (thanks to 俞伟搏)  
Fixed - event listener src class and dest bean is no match (thanks to @cifaz)  
Fixed - illegal transport parameter (thanks to @mirus36)  

#### 29-Apr-2021 - version 1.7.19 released  
Feature - writeBufferWaterMarkLow and writeBufferWaterMarkHigh settings added (thanks to @xuminwlt)  
Feature - allowHeaders setting added (thanks to @HuangHuan)  
Feature - getCurrentRoomSize() method added (thanks to @sunxiaoyu3)  

Fixed - namespace bug (thanks to @@johntyty912)  
Fixed - multiple nodes with redisson receive same message (thanks to 梁嘉祺)  
Fixed - multiple nodes receive only one LEAVE msg on client disconnect (thanks to @GaryLeung922)  

#### 17-Jan-2020 - version 1.7.18 released  
Feature - support for event interceptors which catch all events (thanks to @yosiat)  
Fixed - namespace event broadcasting (thanks to Volodymyr Masliy)  

#### 11-Jan-2019 - version 1.7.17 released  
Feature - randomSession setting added to Config object (thanks to @yuanxiangz)  
Fixed - NPE in WebSocketTransport  
Fixed - NPE & memory leak (thanks to zhaolianwang)  
Fixed - namespace parsing (thanks to Redliver)  
Fixed - Redisson 3.9+ compatibility  

#### 06-Jul-2018 - version 1.7.16 released  
Fixed - non thread-safe ACK handling (thanks to @dawnbreaks)  
Fixed - inactive long-polling channels cause memory leak (thanks to @dawnbreaks)  
Fixed - websocket CloseFrame processing (thanks to @hangsu.cho)  
Fixed - WebSocketTransport NPE  

#### 15-May-2018 - version 1.7.15 released  

Fixed - Session ID is not unique anymore  
Fixed - fixed underlying connection not closing on ping timeout  
Fixed - the "fin_close" problem  

#### 26-Feb-2018 - version 1.7.14 released  
Feature - added local socket address for the connection (thanks to @SergeyGrigorev)  
Feature - `addPingListener` method added (thanks to @lovebing)  
Feature - add ThreadFactory for HashedWheelTimer (thanks to @hand515)  
Fixed - changed SO_LINGER to be handled as child channel (not server channel) option (thanks to @robymus)  
Fixed - ByteBuf leak if binary attachments are used  
Fixed - restore session from Cookie (thanks to @wuxudong)  
Fixed - NumberFormatException when b64 is bool value (thanks to @vonway)  
Fixed - data encoding for polling transport  

#### 20-Sep-2017 - version 1.7.13 released  
Feature - Added option to change the SSL KeyFactoryAlgorithm using Configuration (thanks to @robymus)  
Improvement - Binary ack handling improvements (thanks to Sergey Bushik)  
Fixed - Failed to mark a promise as success because it has succeeded already (thanks to @robymus)

#### 27-Aug-2016 - version 1.7.12 released  
Feature - `SocketIOServer.removeAllListeners` method added  
Feature - `BroadcastOperations.sendEvent` method with `excludedClient` param added  
Improvement - Redisson updated to 2.4.0  
Fixed - memory leak in Namespace object (thanks to @CrazyIvan007)  


#### 13-Jul-2016 - version 1.7.11 released  
Fixed - Throw error if transport not supported  
Fixed - Client disconnecting when using Polling - IndexOutOfBoundsException  

#### 4-Mar-2016 - version 1.7.10 released  
Fixed - netty updated to 4.1.0.CR3 version  
Fixed - binary packet parsing (thanks to Winston Li)  

#### 6-Feb-2016 - version 1.7.9 released  
Feature - Compression support  
Fixed - DotNET client request handling  
Fixed - Packet length format parsing  
Fixed - skipping 'd=' in packet  
Fixed - Polling clients sporadically get prematurely disconnected (thanks to lpage30)  
Fixed - connections stay open forever if server sent `close` packet  
Fixed - compatibility with Redisson latest version  

#### 30-Nov-2015 - version 1.7.8 released  
Improvement - `WebSocketServerHandshaker.allowExtensions` is `true` now  
Improvement - SessionID cookie implementation (thanks to @ryandietrich)  
Fixed - clientRooms leak (thanks to @andreaspalm)  
Fixed - ExceptionListener not used for errors in JSON parsing  
Fixed - "silent channel" attack    

#### 26-Mar-2015 - version 1.6.7 released  
Improvement - `useStrictOrdering` param added for websocket packets strict ordering  
Improvement - `FAIL_ON_EMPTY_BEANS = false` option setted in json decoder  

#### 18-Feb-2015 - version 1.7.7 released  
Improvement - no need to add jackson lib if you use own JsonSupport impl    
Fixed - SocketIO client 1.3.x support  
Fixed - Charset encoding handling (thanks to  alim-akbashev)  

#### 17-Jan-2015 - version 1.7.6 released  
Improvement - `SocketIONamespace.getName()` added  
Fixed - WebSocket frames aggregation  
Fixed - WebSocket buffer release  
Fixed - `Unexpected end-of-input in VALUE_STRING` error  
Fixed - Access-Control-Allow-Credentials is TRUE for requests with origin header  

#### 05-Dec-2014 - version 1.7.5 released  
Feature - `Configuration.sslProtocol` param added  
Fixed - BinaryEvent ack handling  
Fixed - BinaryEvent non b64 encoding/decoding  
Fixed - buffer leak during packet encoding  

#### 15-Nov-2014 - version 1.7.4 released  
Fixed - packet encoding  
Fixed - BinaryEvent encoding/decoding  
Fixed - unchallenged connections handling  

#### 29-Sep-2014 - version 1.6.6 released  
Feature - `origin` setting added  
Feature - `crossDomainPolicy` setting added  
Feature - `SocketIOServer.startAsync` method added  

#### 24-Sep-2014 - version 1.7.3 released  
Feature - Epoll support  
Improvement - BinaryEvent support  
Fixed - SocketIOClient disconnect handling  
Fixed - broadcast callback  
Fixed - NPE then no transport defined during auth  
Fixed - ping timeout for polling transport  
Fixed - buffer leak in PacketEncoder  

#### 22-Aug-2014 - version 1.7.2 released  
Fixed - wrong outgoing message encoding using websocket transport  
Fixed - NPE in websocket transport  
Fixed - multiple packet decoding in polling transport  
Fixed - buffer leak  

#### 07-Jul-2014 - version 1.7.1 released  
Feature - ability to set custom `Access-Control-Allow-Origin` via Configuration.origin  
Fixed - connection via CLI socket.io-client  

#### 28-Jun-2014 - version 1.7.0 released
Feature - Socket.IO 1.0 protocol support. Thanks to the new protocol decoding/encoding has speedup  
__Dropped__ - `SocketIOClient.sendMessage`, `SocketIOClient.sendJsonObject` methods and corresponding listeners  
__Dropped__ - Flashsocket transport support  
__Dropped__ - protocol version 0.7 ... 0.9.16  

#### 13-May-2014 - version 1.6.5 released
Improvement - single packet encoding optimized, used mostly in WebSocket transport. Encoding time reduced up to 40% (thanks to Viktor Endersz)  
Improvement - rooms handling optimized  
Improvement - ExceptionListener.exceptionCaught method added  
__Breaking api change__ - Configuration.autoAck replaced with ackMode  
Feature - trustStore setting added  
Feature - maxFramePayloadLength setting added  
Feature - getAllClients and getClient methods added to SocketIONamespace  
Fixed - SocketIOServer.getAllClients returns wrong clients amount  

#### 25-Mar-2014 - version 1.6.4 released
Fixed - message release problem  
Fixed - problem with exception listener configuration redefinition  
__Breaking api change__ - DataListener.onData now throws Exception  
Improvement - data parameter added to exception listener  
Improvement - ability to setup socket configuration  
Improvement - Configuration.autoAck parameter added  

#### 06-Mar-2014 - version 1.6.3 released
Fixed - AckCallback handling during client disconnect  
Fixed - unauthorized handshake HTTP code changed to 401  
__Breaking api change__ - Configuration.heartbeatThreadPoolSize setting removed  
Feature - annotated Spring beans support via _SpringAnnotationScanner_  
Feature - common exception listener  
Improvement - _ScheduledExecutorService_ replaced with _HashedWheelTimer_  

#### 08-Feb-2014 - version 1.6.2 released
Fixed - wrong namespace client disconnect handling  
Fixed - exception in onConnect/onDisconnect/isAuthorized methods leads to server hang  
__Breaking api change__ - SocketIOClient.sendEvent methods signature changed  
Improvement - multi type events support via _MultiTypeEventListener_ and _OnEvent_ annotation  
Improvement - multi type events ack support via _MultiTypeAckCallback_  
Improvement - SocketIOClient.getHandshakeData method added  
Improvement - Jedis replaced with [Redisson](https://github.com/mrniko/redisson)  

#### 14-Jan-2014 - version 1.6.1 released
Fixed - JDK 1.6+ compatibility  
Feature - authorization support  

#### 19-Dec-2013 - version 1.6.0 released
Fixed - XHR-pooling transport regression  
Fixed - Websocket transport regression  
Fixed - namespace NPE in PacketHandler  
Fixed - executors shutdown during server stop  
Feature - client store (Memory, [Redis](http://redis.io/), [Hazelcast](http://www.hazelcast.com/)) support  
Feature - distributed broadcast across netty-socketio nodes ([Redis](http://redis.io/), [Hazelcast](http://www.hazelcast.com/)) support  
Feature - OSGi support (thanks to rdevera)  
Improvement - XHR-pooling optimization  
Improvement - SocketIOClient.getAllRooms method added

#### 07-Dec-2013 - version 1.5.4 released
Fixed - flash policy "request leak" after page reload (thanks to ntrp)  
Fixed - websocket swf loading (thanks to ntrp)  
Fixed - wrong urls causes a potential DDoS  
Fixed - Event.class package visibility changed to avoid direct usage  
Improvement - Simplified Jackson modules registration

#### 24-Oct-2013 - version 1.5.2 released
Fixed - NPE during shutdown  
Improvement - isEmpty method added to Namespace

#### 13-Oct-2013 - version 1.5.1 released
Fixed - wrong ack timeout callback invocation  
Fixed - bigdecimal serialization for JSON  
Fixed - infinity loop during packet handling exception  
Fixed - 'client not found' handling  

#### 27-Aug-2013 - version 1.5.0 released
Improvement - encoding buffers allocation optimization.  
Improvement - encoding buffers now pooled in memory to reduce GC pressure (netty 4.x feature).  

#### 03-Aug-2013 - version 1.0.1 released
Fixed - error on unknown property during deserialization.  
Fixed - memory leak in long polling transport.  
Improvement - logging error info with inbound data.
 
#### 07-Jun-2013 - version 1.0.0 released
First stable release.