Dieses Projekt ist eine Open-Source-Java-Implementierung des Socket.IO-Servers. Basierend auf dem Netty-Server-Framework.
Lizenziert unter der Apache-Lizenz 2.0.
JAR ist mit Java 8 kompatibel, benötigt jedoch Java 11+ zum Erstellen der Modulinformationen.
Fügen Sie Folgendes zu Ihrer Abhängigkeitsliste hinzu:
< dependency >
< groupId >com.corundumstudio.socketio</ groupId >
< artifactId >netty-socketio</ artifactId >
< version >2.0.12</ version >
</ dependency >
Kundenfeedback im Jahr 2012 :
CentOS, 1 CPU, 4 GB RAM, ausgeführt auf VM: CPU 10 %, Speicher 15 %
6.000 xhr-lange Abfragesitzungen oder 15.000 Websockets-Sitzungen
4000 Nachrichten pro Sekunde
Kundenfeedback 2014 :
„Um die Lösung einem Stresstest zu unterziehen, haben wir 30.000 WebSocket-Clients gleichzeitig ausgeführt und es geschafft, einen Spitzenwert von insgesamt etwa 140.000 Nachrichten pro Sekunde mit einer durchschnittlichen Verzögerung von weniger als einer Sekunde zu erreichen.“ (c) Viktor Endersz – Kambi Sports Solutions
Mehrspieler-Orchester: multiplayer-orchestra.com
AVOS Cloud: avoscloud.com
Kambi Sports Solutions: kambi.com
ARSnova: arsnova.eu
Funktion – Einstellung „enableCors“ hinzugefügt (danke an @zd925)
Feature – Möglichkeit, einen http-Request-Decoder zu definieren (danke an @gurkancakir)
Behoben – wenn ack nach dem Timeout-Trigger zurückkehrt, wird eine IllegalStateException ausgelöst (danke an @malinGH)
Behoben – verhindert, dass der Client wiederholt eine Verbindung zum Namespace herstellt (danke an @bigtian99)
Behoben – Anhänge standardmäßig als binär behandeln (Danke an @nicsor)
Behoben – behebbare Handshake-Fehlerbehandlung (danke an @berinhardt)
Behoben – HashedWheelTimeoutScheduler sollte geplante Futures vor der Aufgabenausführung entfernen (danke an @berinhardt)
Behoben – Benutzerdefinierte Namespaces unterstützen Authentifizierungsdaten (danke an @Addi)
Behoben – Lesen des Bildpuffers für Anhänge
Behoben – Speicherverlust während WebSocketServerHandshakeException oder Channel fehlgeschlagen ist (danke an @h3mant-1)
Feature – v3/v4 Parsen mehrerer Nachrichten in einem HTTP-Polling-Body (Danke an @unverbraucht)
Behoben – IllegalReferenceCountException-Fehler
Behoben – mögliches OOM, verursacht durch das Parsen von Anhängen
Unterstützung für Github-Aktionen von @liangyuanpeng
Feature - Unterstützung für Java-Module (danke an @unverbraucht)
Feature – AuthTokenListener hinzugefügt (danke an @unverbraucht)
Feature – Multi-Packet-Separator-Unterstützung (danke an @unverbraucht)
Verbesserung – Bulk-Urlaubsereignis anstelle mehrerer Urlaubsereignisse beim Trennen senden (Danke an @ksahu750)
Behoben – NPE während des Zeitlimits für die Bestätigungsantwort (danke an @BlueSodaWater)
Behoben – Ressourcenleck in der readVersion()-Methode (danke an @JHOANG23)
Funktion – zusätzliche Verfügbarkeit zum Hinzufügen von Schlüssel-Wert-Paaren zum Socket-Speicher während der Autorisierung (danke an @shutuper)
Feature – getRoomOperations()-Methode mit Raum-Varargs-Parameter (Danke an @shutuper)
Behoben – Client kann keine Verbindung zu einem nicht standardmäßigen Namespace herstellen (danke an @lyjnew)
Behoben – NPE in WebSocketTransport und PollingTransport (danke an @Hunterk95)
JDK 8 ist die für die Nutzung erforderliche Mindestversion.
Behoben – Nachrichten, die größer als maxFramePayloadLength sind, verursachen einen Speicherverlust
Feature – Unterstützung des SocketIO 4.x-Protokolls (danke an @HashZhang)
Behoben – alle Socketio-spezifischen Klassen zu Bundles hinzufügen (danke an @rishabhgup)
Behoben – io.netty.channel.ChannelPipelineException-Fehler
Feature – Methode SocketIOClient.isWritable() hinzugefügt (danke @xuwenqing04)
Feature – Methode Namespace.addListeners(Iterable listeners) hinzugefügt (danke @damonxue)
Behoben – Ereignispaket „Disconnect“ sollte ein Untertyp von MESSAGE sein (danke @MasterShi)
Behoben – BaseStoreFactory löst NPE aus
Funktion – Unterstützung für Massenbeitritt und -austritt hinzugefügt (danke @ksahu750)
Behoben – automatische Trennung (Rückgang seit 1.7.22)
Feature – Ping/Pong-Unterstützung für das Socketio v4-Protokoll (danke an @HashZhang)
Behoben – Transportname sollte in Großbuchstaben überprüft werden (Regression seit 1.7.20)
Funktion – NeedClientAuth-Einstellung hinzugefügt (danke an @huws)
Behoben – ContinuationWebSocketFrame sollte verwendet werden, wenn Nutzlast > maxFramePayloadLength (danke an 俞伟搏)
Behoben – Event-Listener-SRC-Klasse und Ziel-Bean stimmen nicht überein (danke an @cifaz)
Behoben – illegaler Transportparameter (danke an @mirus36)
Funktion – Einstellungen für writeBufferWaterMarkLow und writeBufferWaterMarkHigh hinzugefügt (danke an @xuminwlt)
Funktion – Einstellung „allowHeaders“ hinzugefügt (danke an @HuangHuan)
Feature – Methode getCurrentRoomSize() hinzugefügt (danke an @sunxiaoyu3)
Behoben – Namespace-Fehler (danke an @@johntyty912)
Behoben – mehrere Knoten mit Redisson erhalten dieselbe Nachricht (Danke an 梁嘉祺)
Behoben – mehrere Knoten erhalten nur eine LEAVE-Nachricht, wenn der Client getrennt wird (danke an @GaryLeung922)
Feature – Unterstützung für Event-Interceptors, die alle Events abfangen (danke an @yosiat)
Behoben – Übertragung von Namespace-Ereignissen (danke an Volodymyr Masliy)
Feature – randomSession-Einstellung zum Config-Objekt hinzugefügt (Danke an @yuanxiangz)
Behoben – NPE im WebSocketTransport
Behoben – NPE und Speicherleck (Danke an Zhaolianwang)
Behoben – Namespace-Analyse (danke an Redliver)
Behoben – Kompatibilität mit Redisson 3.9+
Behoben – nicht threadsichere ACK-Verarbeitung (danke an @dawnbreaks)
Behoben – inaktive Long-Polling-Kanäle verursachen Speicherverlust (danke an @dawnbreaks)
Behoben – Websocket-CloseFrame-Verarbeitung (danke an @hangsu.cho)
Behoben – WebSocketTransport NPE
Behoben – Sitzungs-ID ist nicht mehr eindeutig
Behoben – zugrunde liegende Verbindung wurde bei Ping-Timeout nicht geschlossen
Behoben – das „fin_close“-Problem
Feature – lokale Socket-Adresse für die Verbindung hinzugefügt (danke an @SergeyGrigorev)
Feature – addPingListener
-Methode hinzugefügt (danke an @lovebing)
Funktion – ThreadFactory für HashedWheelTimer hinzufügen (danke an @hand515)
Behoben – SO_LINGER wurde so geändert, dass es als untergeordnete Kanaloption (nicht als Serverkanal) behandelt wird (Danke an @robymus)
Behoben – ByteBuf-Leck, wenn binäre Anhänge verwendet werden
Behoben – Sitzung aus Cookie wiederherstellen (danke an @wuxudong)
Behoben – NumberFormatException, wenn b64 ein boolescher Wert ist (danke an @vonway)
Behoben – Datenkodierung für den Polling-Transport
Funktion – Option hinzugefügt, um den SSL KeyFactoryAlgorithm mithilfe der Konfiguration zu ändern (danke an @robymus)
Verbesserung – Verbesserungen bei der Verarbeitung binärer Bestätigungen (Dank an Sergey Bushik)
Behoben – Ein Versprechen konnte nicht als Erfolg markiert werden, da es bereits erfolgreich war (danke an @robymus)
Funktion – Methode SocketIOServer.removeAllListeners
hinzugefügt
Funktion – Methode BroadcastOperations.sendEvent
mit hinzugefügtem Parameter excludedClient
.
Verbesserung – Redisson auf 2.4.0 aktualisiert
Behoben – Speicherverlust im Namespace-Objekt (danke an @CrazyIvan007)
Behoben – Fehler auslösen, wenn Transport nicht unterstützt wird
Behoben – Client trennt die Verbindung, wenn Polling verwendet wird – IndexOutOfBoundsException
Behoben – Netty wurde auf Version 4.1.0.CR3 aktualisiert
Behoben – Parsen von Binärpaketen (Danke an Winston Li)
Funktion – Komprimierungsunterstützung
Behoben – Handhabung von DotNET-Client-Anfragen
Behoben – Parsen des Paketlängenformats
Behoben – „d=“ wurde im Paket übersprungen
Behoben – Polling-Clients werden sporadisch vorzeitig getrennt (danke an lpage30)
Behoben – Verbindungen bleiben für immer geöffnet, wenn der Server ein close
sendet
Behoben – Kompatibilität mit der neuesten Version von Redisson
Verbesserung – WebSocketServerHandshaker.allowExtensions
ist jetzt true
Verbesserung – SessionID-Cookie-Implementierung (danke an @ryandietrich)
Behoben – clientRooms-Leck (danke an @andreaspalm)
Behoben – ExceptionListener wird nicht für Fehler bei der JSON-Analyse verwendet
Behoben – „Stiller Kanal“-Angriff
Verbesserung – Parameter useStrictOrdering
für strikte Sortierung von WebSocket-Paketen hinzugefügt
Verbesserung – FAIL_ON_EMPTY_BEANS = false
Option im JSON-Decoder festgelegt
Verbesserung – Jackson Lib muss nicht hinzugefügt werden, wenn Sie ein eigenes JsonSupport-Impl verwenden
Behoben – Unterstützung für SocketIO-Client 1.3.x
Behoben – Handhabung der Zeichensatzkodierung (danke an alim-akbashev)
Verbesserung – SocketIONamespace.getName()
hinzugefügt
Behoben – WebSocket-Frames-Aggregation
Behoben – WebSocket-Pufferfreigabe
Behoben – Unexpected end-of-input in VALUE_STRING
Fehler
Behoben – Access-Control-Allow-Credentials ist TRUE für Anfragen mit Origin-Header
Funktion – Parameter Configuration.sslProtocol
hinzugefügt
Behoben – BinaryEvent-Bestätigungsverarbeitung
Behoben – BinaryEvent nicht b64-Kodierung/Dekodierung
Behoben – Pufferleck während der Paketkodierung
Behoben – Paketkodierung
Behoben – BinaryEvent-Kodierung/Dekodierung
Behoben – unangefochtene Verbindungsverarbeitung
Funktion – origin
hinzugefügt
Funktion – crossDomainPolicy
-Einstellung hinzugefügt
Funktion – Methode SocketIOServer.startAsync
hinzugefügt
Funktion – Epoll-Unterstützung
Verbesserung – BinaryEvent-Unterstützung
Behoben – Verarbeitung von SocketIOClient-Trennungen
Behoben – Broadcast-Rückruf
Behoben – NPE dann kein Transport definiert während der Authentifizierung
Behoben – Ping-Zeitüberschreitung beim Polling-Transport
Behoben – Pufferleck im PacketEncoder
Behoben – falsche Codierung ausgehender Nachrichten mithilfe des WebSocket-Transports
Behoben – NPE beim WebSocket-Transport
Behoben – Mehrfachpaketdekodierung beim Polling-Transport
Behoben – Pufferleck
Funktion – Möglichkeit, benutzerdefinierten Access-Control-Allow-Origin
über Configuration.origin festzulegen
Behoben – Verbindung über CLI socket.io-client
Funktion – Unterstützung des Socket.IO 1.0-Protokolls. Dank des neuen Protokolls wurde die Dekodierung/Kodierung beschleunigt
Entfallen – SocketIOClient.sendMessage
, SocketIOClient.sendJsonObject
-Methoden und entsprechende Listener
Entfallen – Unterstützung für Flashsocket-Transport
Entfallen – Protokollversion 0.7 ... 0.9.16
Verbesserung – Einzelpaketkodierung optimiert, wird hauptsächlich beim WebSocket-Transport verwendet. Kodierungszeit um bis zu 40 % reduziert (Danke an Viktor Endersz)
Verbesserung – Raumhandling optimiert
Verbesserung – Methode ExceptionListener.ExceptionCaught hinzugefügt
Unterbrechende API-Änderung – Configuration.autoAck wurde durch ackMode ersetzt
Funktion – TrustStore-Einstellung hinzugefügt
Funktion – Einstellung „maxFramePayloadLength“ hinzugefügt
Funktion – getAllClients- und getClient-Methoden zu SocketIONamespace hinzugefügt
Behoben – SocketIOServer.getAllClients gibt die falsche Anzahl an Clients zurück
Behoben – Problem mit der Nachrichtenfreigabe
Behoben – Problem mit der Neudefinition der Ausnahme-Listener-Konfiguration
Unterbrechende API-Änderung – DataListener.onData löst jetzt eine Ausnahme aus
Verbesserung – Datenparameter zum Ausnahme-Listener hinzugefügt
Verbesserung – Möglichkeit, die Socket-Konfiguration einzurichten
Verbesserung – Parameter „Configuration.autoAck“ hinzugefügt
Behoben – AckCallback-Behandlung während der Client-Trennung
Behoben – HTTP-Code für nicht autorisierten Handshake in 401 geändert
Unterbrechende API-Änderung – Einstellung „Configuration.heartbeatThreadPoolSize“ entfernt
Feature – Unterstützung für annotierte Spring Beans über SpringAnnotationScanner
Funktion – gemeinsamer Ausnahme-Listener
Verbesserung – ScheduledExecutorService durch HashedWheelTimer ersetzt
Behoben – falsche Handhabung der Namespace-Client-Trennung
Behoben – Ausnahme in den Methoden onConnect/onDisconnect/isAuthorized führt zum Hängen des Servers
Unterbrechende API-Änderung – Signatur der SocketIOClient.sendEvent-Methode geändert
Verbesserung – Unterstützung mehrerer Ereignistypen über MultiTypeEventListener und OnEvent- Annotation
Verbesserung – Unterstützung für die Bestätigung mehrerer Typereignisse über MultiTypeAckCallback
Verbesserung – Methode SocketIOClient.getHandshakeData hinzugefügt
Verbesserung – Jedis durch Redisson ersetzt
Behoben – Kompatibilität mit JDK 1.6+
Funktion – Autorisierungsunterstützung
Behoben – XHR-Pooling-Transportregression
Behoben – Regression des Websocket-Transports
Behoben – Namespace NPE im PacketHandler
Behoben – Executoren werden beim Serverstopp heruntergefahren
Funktion – Unterstützung für Client-Stores (Memory, Redis, Hazelcast).
Funktion – Unterstützung für verteilte Übertragung über Netty-Socketio-Knoten (Redis, Hazelcast).
Feature – OSGi-Unterstützung (danke an rdevera)
Verbesserung – XHR-Pooling-Optimierung
Verbesserung – Methode SocketIOClient.getAllRooms hinzugefügt
Behoben – Flash-Richtlinie „Anforderungsleck“ nach Neuladen der Seite (danke an ntrp)
Behoben – WebSocket-SWF-Laden (danke an ntrp)
Behoben – falsche URLs verursachen einen potenziellen DDoS-Angriff
Behoben – Die Sichtbarkeit des Event.class-Pakets wurde geändert, um eine direkte Verwendung zu vermeiden
Verbesserung – Vereinfachte Registrierung von Jackson-Modulen
Behoben – NPE beim Herunterfahren
Verbesserung – isEmpty-Methode zum Namespace hinzugefügt
Behoben – falscher Rückrufaufruf bei Bestätigungs-Timeout
Behoben – Bigdecimal-Serialisierung für JSON
Behoben – Endlosschleife während der Paketverarbeitungsausnahme
Behoben – Handhabung „Client nicht gefunden“.
Verbesserung – Optimierung der Codierungspufferzuordnung.
Verbesserung – Codierungspuffer werden jetzt im Speicher zusammengefasst, um den GC-Druck zu reduzieren (Netty 4.x-Funktion).
Behoben – Fehler bei unbekannter Eigenschaft während der Deserialisierung.
Behoben – Speicherverlust beim langen Polling-Transport.
Verbesserung – Fehlerinformationen mit eingehenden Daten protokollieren.
Erste stabile Version.