该项目是 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年客户反馈:
CentOS,1 个 CPU,4GB RAM,在虚拟机上运行:CPU 10%,内存 15%
6000 个 xhr 长的轮询会话或 15000 个 websockets 会话
每秒 4000 条消息
2014年客户反馈:
“为了对解决方案进行压力测试,我们同时运行了 30,000 个 Websocket 客户端,并设法达到每秒约 140,000 条消息的峰值,平均延迟不到 1 秒。” (c) Viktor Endersz - Kambi Sports Solutions
多人管弦乐队:multiplayer-orchestra.com
AVOS 云:avoscloud.com
卡姆比运动解决方案:kambi.com
ARSnova:arsnova.eu
功能 - 添加了enableCors设置(感谢@zd925)
功能 - 能够定义 http 请求解码器(感谢@gurkancakir)
已修复 - 如果 ack 在超时触发后返回,则会抛出 IllegalStateException(感谢@malinGH)
已修复 - 防止客户端重复连接到命名空间(感谢@bigtian99)
已修复 - 默认情况下将附件视为二进制文件(感谢@nicsor)
已修复 - 可恢复的握手失败处理(感谢@berinhardt)
已修复 - HashedWheelTimeoutScheduler 应在任务执行之前删除 ScheduledFutures(感谢 @berinhardt)
已修复 - 自定义命名空间支持身份验证数据(感谢@Addi)
固定 - 附件帧缓冲区读取
已修复 - WebSocketServerHandshakeException 或 Channel 失败时内存泄漏(感谢 @h3mant-1)
功能 - 在一个 HTTP 轮询正文中对多条消息进行 v3/v4 解析(感谢 @unverbraucht)
已修复 - IllegalReferenceCountException 错误
已修复 - 附件解析可能导致 OOM
由 @liangyuanpeng 提供的 Github Actions 支持
功能 - Java 模块支持(感谢@unverbraucht)
功能 - 添加了 AuthTokenListener(感谢 @unverbraucht)
功能 - 多数据包分隔符支持(感谢@unverbraucht)
改进 - 在断开连接时发送批量离开事件而不是多个离开事件(感谢@ksahu750)
已修复 - ack 响应超时期间的 NPE(感谢@BlueSodaWater)
已修复 - readVersion() 方法中的资源泄漏(感谢@JHOANG23)
功能 - 增加了在授权期间将键值对添加到套接字存储的可用性(感谢@shutuper)
功能 - 带有 room varargs 参数的 getRoomOperations() 方法(感谢 @shutuper)
已修复 - 客户端无法连接到非默认命名空间(感谢@lyjnew)
已修复 - WebSocketTransport 和 PollingTransport 中的 NPE(感谢 @Hunterk95)
JDK 8 是使用所需的最低版本。
已修复 - 消息大于 maxFramePayloadLength 导致内存泄漏
功能 - SocketIO 4.x 协议支持(感谢@HashZhang)
已修复 - 将所有 socketio 特定类添加到捆绑包中(感谢 @rishabhgup)
已修复 - io.netty.channel.ChannelPipelineException 错误
功能 - 添加了 SocketIOClient.isWritable() 方法(感谢@xuwenqing04)
功能 - 添加了 Namespace.addListeners(Iterablelisteners) 方法(感谢@damonxue)
已修复 - 断开连接事件数据包应该是 MESSAGE 的子类型(感谢@MasterShi)
已修复 - BaseStoreFactory 抛出 NPE
功能 - 添加了对批量加入和离开的支持(感谢@ksahu750)
已修复 - 自动断开连接(自 1.7.22 起回归)
功能 - 对 socketio v4 协议的 ping/pong 支持(感谢 @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)
功能 - randomSession 设置添加到 Config 对象(感谢@yuanshanz)
已修复 - WebSocketTransport 中的 NPE
已修复 - NPE 和内存泄漏(感谢 zhaolianwang)
已修复 - 命名空间解析(感谢 Redliver)
已修复 - Redisson 3.9+ 兼容性
已修复 - 非线程安全 ACK 处理(感谢@dawnbreaks)
已修复 - 不活动的长轮询通道会导致内存泄漏(感谢@dawnbreaks)
已修复 - websocket CloseFrame 处理(感谢@hangsu.cho)
已修复 - WebSocketTransport NPE
已修复 - 会话 ID 不再是唯一的
已修复 - 修复了 ping 超时时底层连接未关闭的问题
已修复 - “fin_close”问题
功能 - 添加了连接的本地套接字地址(感谢@SergeyGrigorev)
功能 - 添加了addPingListener
方法(感谢@lovebing)
功能 - 为 HashedWheelTimer 添加 ThreadFactory(感谢@hand515)
已修复 - 将 SO_LINGER 更改为作为子通道(而不是服务器通道)选项进行处理(感谢@robymus)
已修复 - 如果使用二进制附件,则 ByteBuf 泄漏
已修复 - 从 Cookie 恢复会话(感谢@wuxudong)
已修复 - 当 b64 为 bool 值时出现 NumberFormatException(感谢 @vonway)
固定 - 轮询传输的数据编码
功能 - 添加了使用配置更改 SSL KeyFactoryAlgorithm 的选项(感谢 @robymus)
改进 - 二进制确认处理改进(感谢 Sergey Bushik)
已修复 - 无法将承诺标记为成功,因为它已经成功(感谢@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 cookie 实现(感谢@ryandietrich)
已修复 - clientRooms 泄漏(感谢@andreaspalm)
已修复 - ExceptionListener 不用于 JSON 解析中的错误
已修复-“沉默通道”攻击
改进 - 为 websocket 数据包严格排序添加了useStrictOrdering
参数
改进 - json 解码器中设置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 确认处理
已修复 - BinaryEvent 非 b64 编码/解码
已修复 - 数据包编码期间缓冲区泄漏
固定-数据包编码
已修复 - BinaryEvent 编码/解码
固定 - 无挑战的连接处理
功能 - 添加origin
设置
功能 - 添加了crossDomainPolicy
设置
功能 - 添加了SocketIOServer.startAsync
方法
功能 - Epoll 支持
改进 - BinaryEvent 支持
已修复 - SocketIOClient 断开连接处理
固定 - 广播回调
已修复 - NPE 在身份验证期间未定义传输
固定 - 轮询传输的 ping 超时
已修复 - PacketEncoder 中的缓冲区泄漏
已修复 - 使用 websocket 传输的传出消息编码错误
已修复 - Websocket 传输中的 NPE
固定 - 轮询传输中的多数据包解码
已修复 - 缓冲区泄漏
功能 - 能够通过 Configuration.origin 设置自定义Access-Control-Allow-Origin
已修复 - 通过 CLI socket.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 设置
功能 - getAllClients 和 getClient 方法添加到 SocketIONamespace
已修复 - SocketIOServer.getAllClients 返回错误的客户端数量
修复消息发布问题
已修复 - 异常侦听器配置重新定义的问题
破坏 api 更改- DataListener.onData 现在抛出异常
改进 - 将数据参数添加到异常侦听器
改进 - 设置套接字配置的能力
改进 - 添加了 Configuration.autoAck 参数
已修复 - 客户端断开连接期间的 AckCallback 处理
已修复 - 未经授权的握手 HTTP 代码更改为 401
重大 api 更改- Configuration.heartbeatThreadPoolSize 设置已删除
功能 - 通过SpringAnnotationScanner支持带注释的 Spring beans
特性-常见异常监听器
改进 - 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)
已修复 - 错误的网址会导致潜在的 DDoS
已修复 - Event.class 包可见性已更改以避免直接使用
改进 - 简化 Jackson 模块注册
已修复 - 关机期间出现 NPE
改进 - isEmpty 方法添加到命名空间
已修复 - 错误的确认超时回调调用
已修复 - JSON 的大十进制序列化
已修复 - 数据包处理异常期间无限循环
已修复 - “找不到客户端”处理
改进 - 编码缓冲区分配优化。
改进 - 编码缓冲区现在汇集在内存中以减少 GC 压力(netty 4.x 功能)。
已修复 - 反序列化期间未知属性出现错误。
已修复 - 长轮询传输中的内存泄漏。
改进 - 使用入站数据记录错误信息。
第一个稳定版本。