Ce projet est une implémentation Java open source du serveur Socket.IO. Basé sur le framework de serveur Netty.
Sous licence Apache License 2.0.
JAR est compatible avec Java 8 mais nécessite Java 11+ pour créer les informations sur le module.
Incluez les éléments suivants à votre liste de dépendances :
< dependency >
< groupId >com.corundumstudio.socketio</ groupId >
< artifactId >netty-socketio</ artifactId >
< version >2.0.12</ version >
</ dependency >
Retours clients en 2012 :
CentOS, 1 CPU, 4 Go de RAM exécutés sur VM : CPU 10 %, mémoire 15 %
6 000 sessions d'interrogation d'une durée d'une heure ou 15 000 sessions Websockets
4000 messages par seconde
Retours clients en 2014 :
"Pour tester la solution, nous avons exécuté 30 000 clients Websocket simultanés et avons réussi à atteindre un total d'environ 140 000 messages par seconde avec un délai moyen inférieur à 1 seconde." (c) Viktor Endersz - Kambi Sports Solutions
Orchestre multijoueur : multiplayer-orchestra.com
AVOS Cloud : avoscloud.com
Solutions sportives Kambi : kambi.com
ARSnova : arsnova.eu
Fonctionnalité - paramètre activateCors ajouté (merci à @zd925)
Fonctionnalité - possibilité de définir un décodeur de requête http (merci à @gurkancakir)
Corrigé - si ack revient après le déclencheur du délai d'attente, une IllegalStateException sera levée (merci à @malinGH)
Corrigé - empêche le client de se connecter à plusieurs reprises à l'espace de noms (merci à @bigtian99)
Corrigé - traiter les pièces jointes comme binaires par défaut (merci à @nicsor)
Corrigé - gestion des échecs de négociation récupérables (merci à @berinhardt)
Corrigé - HashedWheelTimeoutScheduler devrait supprimer selectedFutures avant l'exécution de la tâche (merci à @berinhardt)
Corrigé : les espaces de noms personnalisés prennent en charge les données d'authentification (merci à @Addi)
Corrigé - lecture du tampon de trame des pièces jointes
Corrigé - fuite de mémoire lors de l'échec de WebSocketServerHandshakeException ou Channel (merci à @h3mant-1)
Fonctionnalité - Analyse v3/v4 de plusieurs messages dans un seul corps d'interrogation HTTP (merci à @unverbraucht)
Corrigé - Erreur IllegalReferenceCountException
Corrigé - MOO possible causé par l'analyse des pièces jointes
Prise en charge des actions Github réalisée par @liangyuanpeng
Fonctionnalité - Prise en charge du module Java (merci à @unverbraucht)
Fonctionnalité - AuthTokenListener ajouté (merci à @unverbraucht)
Fonctionnalité - prise en charge des séparateurs multi-paquets (merci à @unverbraucht)
Amélioration - Envoyer un événement de congé groupé au lieu de plusieurs événements de congé lors de la déconnexion (merci à @ksahu750)
Corrigé - NPE pendant le délai de réponse ack (merci à @BlueSodaWater)
Corrigé - Fuite de ressources dans la méthode readVersion() (merci à @JHOANG23)
Fonctionnalité - disponibilité ajoutée pour ajouter des paires clé-valeur au magasin de sockets pendant l'autorisation (merci à @shutuper)
Fonctionnalité - méthode getRoomOperations() avec le paramètre room varargs (merci à @shutuper)
Corrigé : le client ne peut pas se connecter à un espace de noms autre que celui par défaut (merci à @lyjnew)
Corrigé - NPE dans WebSocketTransport et PollingTransport (merci à @Hunterk95)
JDK 8 est la version minimale requise pour l'utilisation.
Corrigé : un message plus grand que maxFramePayloadLength provoque une fuite de mémoire
Fonctionnalité - Prise en charge du protocole SocketIO 4.x (merci à @HashZhang)
Corrigé - ajoutez toutes les classes spécifiques à socketio aux bundles (merci à @rishabhgup)
Corrigé - erreur io.netty.channel.ChannelPipelineException
Fonctionnalité - Méthode SocketIOClient.isWritable() ajoutée (merci @xuwenqing04)
Fonctionnalité - Méthode Namespace.addListeners (écouteurs Iterable) ajoutée (merci @damonxue)
Corrigé : le paquet d'événements de déconnexion doit être un sous-type de MESSAGE (merci @MasterShi)
Corrigé – BaseStoreFactory lance NPE
Fonctionnalité - Ajout de la prise en charge des jointures et des sorties groupées (merci @ksahu750)
Corrigé - déconnexion automatique (régression depuis 1.7.22)
Fonctionnalité - Prise en charge du ping/pong pour le protocole socketio v4 (merci à @HashZhang)
Corrigé - le nom du transport doit être vérifié en majuscule (régression depuis la 1.7.20)
Fonctionnalité - paramètre needClientAuth ajouté (merci à @huws)
Corrigé - ContinuationWebSocketFrame doit être utilisé si payload > maxFramePayloadLength (merci à 俞伟搏)
Corrigé - la classe src de l'écouteur d'événement et le bean dest ne correspondent pas (merci à @cifaz)
Corrigé - paramètre de transport illégal (merci à @mirus36)
Fonctionnalité - Paramètres writeBufferWaterMarkLow et writeBufferWaterMarkHigh ajoutés (merci à @xuminwlt)
Fonctionnalité - paramètre AllowHeaders ajouté (merci à @HuangHuan)
Fonctionnalité - Méthode getCurrentRoomSize() ajoutée (merci à @sunxiaoyu3)
Correction - bug d'espace de noms (merci à @@johntyty912)
Corrigé - plusieurs nœuds avec redisson reçoivent le même message (merci à 梁嘉祺)
Corrigé : plusieurs nœuds ne reçoivent qu'un seul message LEAVE lors de la déconnexion du client (merci à @GaryLeung922)
Fonctionnalité - prise en charge des intercepteurs d'événements qui capturent tous les événements (merci à @yosiat)
Corrigé - diffusion d'événements d'espace de noms (merci à Volodymyr Masliy)
Fonctionnalité - paramètre randomSession ajouté à l'objet Config (merci à @yuanxiangz)
Corrigé - NPE dans WebSocketTransport
Corrigé - NPE et fuite de mémoire (merci à zhaolianwang)
Corrigé - analyse de l'espace de noms (merci à Redliver)
Corrigé - Compatibilité Redisson 3.9+
Corrigé - gestion ACK non thread-safe (merci à @dawnbreaks)
Corrigé : les canaux d'interrogation longue durée inactifs provoquent une fuite de mémoire (merci à @dawnbreaks)
Corrigé - traitement websocket CloseFrame (merci à @hangsu.cho)
Corrigé - WebSocketTransport NPE
Corrigé - L'ID de session n'est plus unique
Corrigé : correction de la connexion sous-jacente ne se fermant pas en cas d'expiration du délai de ping
Corrigé - le problème "fin_close"
Fonctionnalité - ajout d'une adresse de socket locale pour la connexion (merci à @SergeyGrigorev)
Fonctionnalité - méthode addPingListener
ajoutée (merci à @lovebing)
Fonctionnalité - ajout de ThreadFactory pour HashedWheelTimer (merci à @hand515)
Corrigé - modification de SO_LINGER pour qu'il soit géré comme option de canal enfant (et non de canal serveur) (merci à @robymus)
Corrigé - Fuite de ByteBuf si des pièces jointes binaires sont utilisées
Corrigé - restaurer la session à partir de Cookie (merci à @wuxudong)
Corrigé - NumberFormatException lorsque b64 est une valeur bool (merci à @vonway)
Corrigé - codage des données pour le transport de vote
Fonctionnalité - Ajout d'une option pour modifier le SSL KeyFactoryAlgorithm à l'aide de la configuration (merci à @robymus)
Amélioration - Améliorations de la gestion des accusés de réception binaires (merci à Sergey Bushik)
Corrigé - Impossible de marquer une promesse comme réussie car elle a déjà réussi (merci à @robymus)
Fonctionnalité - Méthode SocketIOServer.removeAllListeners
ajoutée
Fonctionnalité – Méthode BroadcastOperations.sendEvent
avec paramètre excludedClient
ajouté
Amélioration - Redisson mis à jour vers 2.4.0
Corrigé - fuite de mémoire dans l'objet Namespace (merci à @CrazyIvan007)
Corrigé - Erreur de lancement si le transport n'est pas pris en charge
Corrigé - Déconnexion du client lors de l'utilisation de Polling - IndexOutOfBoundsException
Corrigé - Netty mis à jour vers la version 4.1.0.CR3
Corrigé - analyse des paquets binaires (merci à Winston Li)
Fonctionnalité - Prise en charge de la compression
Corrigé – Gestion des requêtes du client DotNET
Corrigé - Analyse du format de longueur de paquet
Corrigé - sauter 'd=' dans le paquet
Corrigé - Les clients d'interrogation étaient sporadiquement déconnectés prématurément (grâce à lpage30)
Corrigé : les connexions restent ouvertes pour toujours si le serveur envoie un paquet close
Corrigé - compatibilité avec la dernière version de Redisson
Amélioration - WebSocketServerHandshaker.allowExtensions
est true
maintenant
Amélioration - Implémentation du cookie SessionID (merci à @ryandietrich)
Corrigé - fuite de clientRooms (merci à @andreaspalm)
Corrigé - ExceptionListener n'est pas utilisé pour les erreurs d'analyse JSON
Corrigé - attaque "canal silencieux"
Amélioration - paramètre useStrictOrdering
ajouté pour l'ordre strict des paquets Websocket
Amélioration - FAIL_ON_EMPTY_BEANS = false
définie dans le décodeur json
Amélioration - pas besoin d'ajouter la bibliothèque Jackson si vous utilisez votre propre impl JsonSupport
Corrigé - Prise en charge du client SocketIO 1.3.x
Corrigé - Gestion de l'encodage du jeu de caractères (merci à alim-akbashev)
Amélioration - SocketIONamespace.getName()
ajouté
Corrigé - Agrégation de frames WebSocket
Corrigé - Libération du tampon WebSocket
Corrigé : Unexpected end-of-input in VALUE_STRING
Corrigé - Access-Control-Allow-Credentials est TRUE pour les requêtes avec en-tête d'origine
Fonctionnalité - Paramètre Configuration.sslProtocol
ajouté
Corrigé – Gestion des accusés de réception de BinaryEvent
Corrigé - Encodage/décodage BinaryEvent non b64
Corrigé - fuite de tampon lors du codage des paquets
Corrigé - encodage des paquets
Corrigé - Encodage/décodage BinaryEvent
Corrigé - gestion des connexions incontestée
Fonctionnalité - paramètre origin
ajouté
Fonctionnalité - paramètre crossDomainPolicy
ajouté
Fonctionnalité - Méthode SocketIOServer.startAsync
ajoutée
Fonctionnalité - Prise en charge d'Epoll
Amélioration - Prise en charge de BinaryEvent
Corrigé – Gestion de la déconnexion de SocketIOClient
Corrigé - rappel de diffusion
Corrigé - NPE puis aucun transport défini lors de l'authentification
Correction du délai d'expiration du ping pour le transport d'interrogation
Corrigé - fuite de tampon dans PacketEncoder
Corrigé - mauvais encodage des messages sortants à l'aide du transport Websocket
Corrigé - NPE dans le transport Websocket
Corrigé - décodage de plusieurs paquets dans le transport d'interrogation
Corrigé - fuite de tampon
Fonctionnalité - possibilité de définir Access-Control-Allow-Origin
personnalisé via Configuration.origin
Fixe - connexion via CLI socket.io-client
Fonctionnalité - Prise en charge du protocole Socket.IO 1.0. Grâce au nouveau protocole, le décodage/encodage est accéléré
Supprimé - Méthodes SocketIOClient.sendMessage
, SocketIOClient.sendJsonObject
et écouteurs correspondants
Abandonné - Prise en charge du transport Flashsocket
Abandonné - version du protocole 0.7 ... 0.9.16
Amélioration - codage de paquet unique optimisé, utilisé principalement dans le transport WebSocket. Temps d'encodage réduit jusqu'à 40% (merci à Viktor Endersz)
Amélioration - gestion des chambres optimisée
Amélioration - Méthode ExceptionListener.exceptionCaught ajoutée
Briser le changement d'API - Configuration.autoAck remplacé par ackMode
Fonctionnalité - paramètre trustStore ajouté
Fonctionnalité - paramètre maxFramePayloadLength ajouté
Fonctionnalité - Méthodes getAllClients et getClient ajoutées à SocketIONamespace
Corrigé - SocketIOServer.getAllClients renvoie un montant de client incorrect
Corrigé - problème de publication de message
Corrigé - problème avec la redéfinition de la configuration de l'écouteur d'exception
Briser le changement d'API - DataListener.onData lève désormais une exception
Amélioration - paramètre de données ajouté à l'écouteur d'exception
Amélioration - possibilité de configurer la configuration des sockets
Amélioration - Ajout du paramètre Configuration.autoAck
Corrigé - Gestion d'AckCallback lors de la déconnexion du client
Corrigé - le code HTTP de poignée de main non autorisée a été modifié en 401
Interruption du changement d'API - Paramètre Configuration.heartbeatThreadPoolSize supprimé
Fonctionnalité - Prise en charge des beans Spring annotés via SpringAnnotationScanner
Fonctionnalité - écouteur d'exceptions commun
Amélioration - ScheduledExecutorService remplacé par HashedWheelTimer
Corrigé - mauvaise gestion de la déconnexion du client d'espace de noms
Corrigé : une exception dans les méthodes onConnect/onDisconnect/isAuthorized entraîne un blocage du serveur.
Briser le changement d'API - La signature des méthodes SocketIOClient.sendEvent a été modifiée
Amélioration - prise en charge des événements multi-types via l'annotation MultiTypeEventListener et OnEvent
Amélioration - prise en charge des événements multi-types via MultiTypeAckCallback
Amélioration - Méthode SocketIOClient.getHandshakeData ajoutée
Amélioration - Jedis remplacé par Redisson
Corrigé - Compatibilité JDK 1.6+
Fonctionnalité - prise en charge des autorisations
Corrigé - Régression de transport par pooling XHR
Corrigé - Régression du transport Websocket
Corrigé - espace de noms NPE dans PacketHandler
Corrigé - arrêt des exécuteurs lors de l'arrêt du serveur
Fonctionnalité - prise en charge du magasin client (Mémoire, Redis, Hazelcast)
Fonctionnalité - prise en charge de la diffusion distribuée sur les nœuds netty-socketio (Redis, Hazelcast)
Fonctionnalité - Prise en charge d'OSGi (merci à rdevera)
Amélioration - Optimisation du pooling XHR
Amélioration - Ajout de la méthode SocketIOClient.getAllRooms
Corrigé - politique flash "demande de fuite" après le rechargement de la page (merci à ntrp)
Corrigé - chargement du websocket swf (merci à ntrp)
Corrigé : des URL incorrectes provoquent un potentiel DDoS
Corrigé - La visibilité du package Event.class a été modifiée pour éviter une utilisation directe
Amélioration - Enregistrement simplifié des modules Jackson
Corrigé - NPE pendant l'arrêt
Amélioration - Méthode isEmpty ajoutée à Namespace
Corrigé - mauvaise invocation de rappel du délai d'expiration de l'accusé de réception
Corrigé - sérialisation bigdecimal pour JSON
Corrigé - boucle infinie lors d'une exception de gestion des paquets
Corrigé – gestion du « client introuvable »
Amélioration - optimisation de l'allocation des tampons d'encodage.
Amélioration - les tampons d'encodage sont désormais regroupés en mémoire pour réduire la pression du GC (fonctionnalité Netty 4.x).
Corrigé - erreur sur une propriété inconnue lors de la désérialisation.
Corrigé - fuite de mémoire lors d'un long transport d'interrogation.
Amélioration : enregistrement des informations sur les erreurs avec les données entrantes.
Première version stable.