MCPcopy
hub / github.com/mrniko/netty-socketio

github.com/mrniko/netty-socketio @netty-socketio-2.0.14 sqlite

repository ↗ · DeepWiki ↗ · release netty-socketio-2.0.14 ↗
940 symbols 2,471 edges 128 files 111 documented · 12%
README

Netty-socketio Overview

This project is an open-source Java implementation of Socket.IO server. Based on Netty server framework.

Licensed under the Apache License 2.0.

Features

  • 1.x - 4.x version of Socket.IO-client 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, Hazelcast, Memory)
  • Supports distributed broadcast across netty-socketio nodes (Redisson, 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:

    <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
AVOS Cloud: avoscloud.com
Kambi Sports Solutions: kambi.com
ARSnova: 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 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

Extension points exported contracts — how you extend this code

Disconnectable (Interface)
(no doc) [9 implementers]
src/main/java/com/corundumstudio/socketio/Disconnectable.java
BroadcastOperations (Interface)
broadcast interface [4 implementers]
src/main/java/com/corundumstudio/socketio/BroadcastOperations.java
AnnotationScanner (Interface)
(no doc) [6 implementers]
src/main/java/com/corundumstudio/socketio/annotation/AnnotationScanner.java
JsonSupport (Interface)
JSON infrastructure interface. Allows to implement custom realizations to JSON support operations. [4 implementers]
src/main/java/com/corundumstudio/socketio/protocol/JsonSupport.java
Store (Interface)
(no doc) [7 implementers]
src/main/java/com/corundumstudio/socketio/store/Store.java

Core symbols most depended-on inside this repo

get
called by 121
src/main/java/com/corundumstudio/socketio/store/Store.java
getSessionId
called by 51
src/main/java/com/corundumstudio/socketio/SocketIOClient.java
add
called by 38
src/main/java/com/corundumstudio/socketio/handler/ClientsBox.java
getSubType
called by 24
src/main/java/com/corundumstudio/socketio/protocol/Packet.java
getData
called by 24
src/main/java/com/corundumstudio/socketio/protocol/Packet.java
getNsp
called by 22
src/main/java/com/corundumstudio/socketio/protocol/Packet.java
getName
called by 21
src/main/java/com/corundumstudio/socketio/SocketIONamespace.java
getType
called by 21
src/main/java/com/corundumstudio/socketio/protocol/Packet.java

Shape

Method 801
Class 108
Interface 25
Enum 6

Languages

Java100%

Modules by API surface

src/main/java/com/corundumstudio/socketio/Configuration.java82 symbols
src/main/java/com/corundumstudio/socketio/namespace/Namespace.java39 symbols
src/main/java/com/corundumstudio/socketio/store/HazelcastPubSubStore.java33 symbols
src/main/java/com/corundumstudio/socketio/handler/ClientHead.java33 symbols
src/main/java/com/corundumstudio/socketio/protocol/JacksonJsonSupport.java32 symbols
src/main/java/com/corundumstudio/socketio/transport/NamespaceClient.java28 symbols
src/main/java/com/corundumstudio/socketio/SocketIOServer.java27 symbols
src/main/java/com/corundumstudio/socketio/protocol/Packet.java25 symbols
src/main/java/com/corundumstudio/socketio/SocketConfig.java19 symbols
src/test/java/com/corundumstudio/socketio/transport/HttpTransportTest.java18 symbols
src/main/java/com/corundumstudio/socketio/ack/AckManager.java17 symbols
src/main/java/com/corundumstudio/socketio/SocketIOClient.java17 symbols

Dependencies from manifests, versioned

com.fasterxml.jackson.core:jackson-core2.18.3 · 1×
com.hazelcast:hazelcast5.6.0 · 1×
io.netty:netty-buffer
io.netty:netty-codec
io.netty:netty-codec-http
io.netty:netty-common
io.netty:netty-handler
io.netty:netty-transport
io.netty:netty-transport-native-epoll
junit:junit4.13.2 · 1×
org.jmockit:jmockit1.49 · 1×

For agents

$ claude mcp add netty-socketio \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact