該專案是 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 功能)。
已修正 - 反序列化期間未知屬性出現錯誤。
已修復 - 長輪詢傳輸中的記憶體洩漏。
改進 - 使用入站資料記錄錯誤訊息。
第一個穩定版本。