Este proyecto es una implementación Java de código abierto del servidor Socket.IO. Basado en el marco del servidor Netty.
Licenciado bajo la Licencia Apache 2.0.
JAR es compatible con Java 8 pero necesita Java 11+ para crear la información del módulo.
Incluya lo siguiente en su lista de dependencia:
< dependency >
< groupId >com.corundumstudio.socketio</ groupId >
< artifactId >netty-socketio</ artifactId >
< version >2.0.12</ version >
</ dependency >
Comentarios de los clientes en 2012 :
CentOS, 1 CPU, 4 GB de RAM ejecutado en VM: CPU 10 %, memoria 15 %
6000 sesiones de sondeo de una hora de duración o 15000 sesiones de websockets
4000 mensajes por segundo
Comentarios de los clientes en 2014 :
"Para probar la solución, ejecutamos 30.000 clientes websocket simultáneos y logramos alcanzar un máximo de aproximadamente 140.000 mensajes por segundo con un retraso promedio de menos de 1 segundo". (c) Viktor Endersz - Kambi Sports Solutions
Orquesta multijugador: multiplayer-orchestra.com
Nube AVOS: avoscloud.com
Soluciones deportivas de Kambi: kambi.com
ARSnova: arsnova.eu
Característica: configuración enableCors agregada (gracias a @zd925)
Característica: capacidad para definir el decodificador de solicitudes http (gracias a @gurkancakir)
Corregido: si el reconocimiento regresa después del activador del tiempo de espera, se generará una excepción IllegalStateException (gracias a @malinGH)
Corregido: evita que el cliente se conecte repetidamente al espacio de nombres (gracias a @bigtian99)
Corregido: trata los archivos adjuntos como binarios de forma predeterminada (gracias a @nicsor)
Corregido: manejo de fallas de protocolo de enlace recuperables (gracias a @berinhardt)
Corregido: HashedWheelTimeoutScheduler debería eliminar ScheduledFutures antes de la ejecución de la tarea (gracias a @berinhardt)
Corregido: los espacios de nombres personalizados admiten datos de autenticación (gracias a @Addi)
Corregido: lectura del buffer de cuadros de archivos adjuntos
Solucionado: pérdida de memoria mientras fallaba WebSocketServerHandshakeException o canal (gracias a @h3mant-1)
Característica: análisis v3/v4 de múltiples mensajes en un cuerpo de sondeo HTTP (gracias a @unverbraucht)
Solucionado: error IllegalReferenceCountException
Corregido - posible OOM causado por el análisis de archivos adjuntos
Soporte de acciones de Github realizado por @liangyuanpeng
Característica: compatibilidad con módulos Java (gracias a @unverbraucht)
Característica: se agregó AuthTokenListener (gracias a @unverbraucht)
Característica: compatibilidad con separadores de paquetes múltiples (gracias a @unverbraucht)
Mejora: envío de eventos de licencia masivos en lugar de eventos de licencia múltiples al desconectarse (gracias a @ksahu750)
Corregido: NPE durante el tiempo de espera de respuesta de confirmación (gracias a @BlueSodaWater)
Corregido: fuga de recursos en el método readVersion() (gracias a @JHOANG23)
Característica: disponibilidad adicional para agregar pares clave-valor al almacén de sockets durante la autorización (gracias a @shutuper)
Característica: método getRoomOperations() con el parámetro room varargs (gracias a @shutuper)
Corregido: el cliente no puede conectarse a un espacio de nombres no predeterminado (gracias a @lyjnew)
Corregido: NPE en WebSocketTransport y PollingTransport (gracias a @Hunterk95)
JDK 8 es la versión mínima requerida para su uso.
Solucionado: un mensaje mayor que maxFramePayloadLength provoca una pérdida de memoria
Característica: compatibilidad con el protocolo SocketIO 4.x (gracias a @HashZhang)
Corregido: agregue todas las clases específicas de socketio a los paquetes (gracias a @rishabhgup)
Solucionado: error io.netty.channel.ChannelPipelineException
Característica: se agregó el método SocketIOClient.isWritable() (gracias @xuwenqing04)
Característica: se agregó el método Namespace.addListeners (oyentes iterables) (gracias @damonxue)
Corregido: el paquete de eventos de desconexión debe ser un subtipo de MENSAJE (gracias @MasterShi)
Corregido: BaseStoreFactory lanza NPE
Característica: se agregó soporte para unirse y salir de forma masiva (gracias @ksahu750)
Corregido: desconexión automática (regresión desde 1.7.22)
Característica: compatibilidad con ping/pong para el protocolo socketio v4 (gracias a @HashZhang)
Corregido: el nombre del transporte debe marcarse en mayúsculas (regresión desde 1.7.20)
Característica: se agregó la configuración needClientAuth (gracias a @huws)
Corregido: se debe usar ContinuationWebSocketFrame si la carga útil > maxFramePayloadLength (gracias a 俞伟搏)
Corregido: la clase src del detector de eventos y el bean dest no coinciden (gracias a @cifaz)
Corregido: parámetro de transporte ilegal (gracias a @mirus36)
Característica: se agregaron las configuraciones writeBufferWaterMarkLow y writeBufferWaterMarkHigh (gracias a @xuminwlt)
Característica: configuración de enableHeaders agregada (gracias a @HuangHuan)
Característica: método getCurrentRoomSize() agregado (gracias a @sunxiaoyu3)
Corregido: error en el espacio de nombres (gracias a @@johntyty912)
Corregido: varios nodos con Redisson reciben el mismo mensaje (gracias a 梁嘉祺)
Corregido: varios nodos reciben solo un mensaje DEJAR al desconectar el cliente (gracias a @GaryLeung922)
Característica: soporte para interceptores de eventos que capturan todos los eventos (gracias a @yosiat)
Corregido: transmisión de eventos de espacio de nombres (gracias a Volodymyr Masliy)
Característica: configuración de sesión aleatoria agregada al objeto de configuración (gracias a @yuanxiangz)
Corregido - NPE en WebSocketTransport
Corregido: NPE y pérdida de memoria (gracias a zhaolianwang)
Corregido: análisis del espacio de nombres (gracias a Redliver)
Corregido: compatibilidad con Redisson 3.9+
Corregido: manejo de ACK no seguro para subprocesos (gracias a @dawnbreaks)
Corregido: los canales inactivos de sondeo prolongado causan pérdida de memoria (gracias a @dawnbreaks)
Corregido: procesamiento de CloseFrame de websocket (gracias a @hangsu.cho)
Corregido: WebSocketTransport NPE
Corregido: el ID de sesión ya no es único
Solucionado: la conexión subyacente reparada no se cierra cuando se agota el tiempo de espera del ping
Solucionado: el problema "fin_close"
Característica: dirección de socket local agregada para la conexión (gracias a @SergeyGrigorev)
Característica: se agregó el método addPingListener
(gracias a @lovebing)
Característica: agregue ThreadFactory para HashedWheelTimer (gracias a @hand515)
Corregido: se modificó SO_LINGER para que se maneje como opción de canal secundario (no de canal de servidor) (gracias a @robymus)
Solucionado: fuga de ByteBuf si se utilizan archivos adjuntos binarios
Corregido: restaurar sesión desde Cookie (gracias a @wuxudong)
Corregido: NumberFormatException cuando b64 tiene un valor bool (gracias a @vonway)
Corregido: codificación de datos para transporte de sondeo
Característica: opción agregada para cambiar el algoritmo SSL KeyFactory mediante Configuración (gracias a @robymus)
Mejora: mejoras en el manejo de confirmación binaria (gracias a Sergey Bushik)
Corregido: no se pudo marcar una promesa como exitosa porque ya tuvo éxito (gracias a @robymus)
Característica: se agregó el método SocketIOServer.removeAllListeners
Característica: método BroadcastOperations.sendEvent
con parámetro excludedClient
agregado
Mejora: Redisson actualizado a 2.4.0
Corregido: pérdida de memoria en el objeto de espacio de nombres (gracias a @CrazyIvan007)
Corregido: arroja error si el transporte no es compatible
Solucionado: el cliente se desconecta al utilizar el sondeo: IndexOutOfBoundsException
Corregido: netty actualizado a la versión 4.1.0.CR3
Corregido: análisis de paquetes binarios (gracias a Winston Li)
Característica - Soporte de compresión
Corregido: manejo de solicitudes del cliente DotNET
Corregido: análisis del formato de longitud del paquete
Corregido: omitir 'd=' en el paquete
Corregido: los clientes de encuestas se desconectaban prematuramente esporádicamente (gracias a lpage30)
Corregido: las conexiones permanecen abiertas para siempre si el servidor envía un paquete close
Corregido: compatibilidad con la última versión de Redisson
Mejora: WebSocketServerHandshaker.allowExtensions
ahora es true
Mejora: implementación de cookies SessionID (gracias a @ryandietrich)
Corregido: fuga de clientRooms (gracias a @andreaspalm)
Corregido: ExceptionListener no se usa para errores en el análisis JSON
Corregido: ataque de "canal silencioso"
Mejora: se agregó el parámetro useStrictOrdering
para el orden estricto de paquetes websocket
Mejora: FAIL_ON_EMPTY_BEANS = false
configurada en el decodificador json
Mejora: no es necesario agregar Jackson lib si usa su propia implementación JsonSupport.
Solucionado: compatibilidad con el cliente SocketIO 1.3.x
Corregido: manejo de codificación de conjuntos de caracteres (gracias a alim-akbashev)
Mejora: se agregó SocketIONamespace.getName()
Corregido: agregación de marcos WebSocket
Corregido: liberación del búfer WebSocket
Corregido: Unexpected end-of-input in VALUE_STRING
Corregido: Access-Control-Allow-Credentials es VERDADERO para solicitudes con encabezado de origen
Característica: parámetro Configuration.sslProtocol
agregado
Corregido: manejo de confirmación de BinaryEvent
Solucionado: codificación/decodificación BinaryEvent sin b64
Corregido: pérdida de búfer durante la codificación de paquetes
Corregido: codificación de paquetes
Corregido: codificación/decodificación de BinaryEvent
Corregido: manejo de conexiones indiscutible
Característica: configuración origin
agregada
Característica: configuración crossDomainPolicy
agregada
Característica: se agregó el método SocketIOServer.startAsync
Característica - Soporte Epoll
Mejora: soporte BinaryEvent
Corregido: manejo de desconexión de SocketIOClient
Corregido - devolución de llamada de transmisión
Corregido: NPE, entonces no se definió ningún transporte durante la autenticación.
Corregido: tiempo de espera de ping para el transporte de sondeo
Corregido: pérdida de búfer en PacketEncoder
Solucionado: codificación incorrecta de mensajes salientes mediante el transporte websocket
Corregido - NPE en transporte websocket
Corregido: decodificación de paquetes múltiples en el transporte de sondeo
Corregido: fuga de buffer
Característica: capacidad de configurar Access-Control-Allow-Origin
personalizado a través de Configuration.origin
Corregido: conexión a través de CLI socket.io-client
Característica: compatibilidad con el protocolo Socket.IO 1.0. Gracias al nuevo protocolo la decodificación/codificación se ha acelerado
Eliminado : métodos SocketIOClient.sendMessage
, SocketIOClient.sendJsonObject
y oyentes correspondientes
Caído : soporte de transporte Flashsocket
Eliminado : versión del protocolo 0.7 ... 0.9.16
Mejora: codificación de paquete único optimizada, utilizada principalmente en el transporte WebSocket. El tiempo de codificación se redujo hasta un 40% (gracias a Viktor Endersz)
Mejora: manejo de salas optimizado
Mejora: se agregó el método ExceptionListener.exceptionCaught
Cambio de API importante : Configuration.autoAck reemplazado por ackMode
Característica: configuración de TrustStore agregada
Característica: se agregó la configuración maxFramePayloadLength
Característica: métodos getAllClients y getClient agregados a SocketINamespace
Solucionado: SocketIOServer.getAllClients devuelve una cantidad de clientes incorrecta
Solucionado: problema de publicación de mensajes
Solucionado: problema con la redefinición de la configuración del oyente de excepciones
Cambio importante en la API : DataListener.onData ahora arroja una excepción
Mejora: parámetro de datos agregado al detector de excepciones
Mejora: capacidad de configurar la configuración del socket
Mejora: parámetro Configuration.autoAck agregado
Corregido: manejo de AckCallback durante la desconexión del cliente
Corregido: el código HTTP de protocolo de enlace no autorizado cambió a 401
Cambio importante en la API : se eliminó la configuración Configuration.heartbeatThreadPoolSize
Característica: compatibilidad con Spring Beans anotados a través de SpringAnnotationScanner
Característica: oyente de excepciones común
Mejora: ScheduledExecutorService reemplazado por HashedWheelTimer
Solucionado: manejo incorrecto de desconexión del cliente del espacio de nombres
Solucionado: la excepción en los métodos onConnect/onDisconnect/isAuthorized provoca que el servidor se cuelgue
Rompiendo el cambio de API : se cambió la firma de los métodos SocketIOClient.sendEvent
Mejora: compatibilidad con eventos de varios tipos a través de la anotación MultiTypeEventListener y OnEvent
Mejora: compatibilidad con eventos de varios tipos a través de MultiTypeAckCallback
Mejora: se agregó el método SocketIOClient.getHandshakeData
Mejora: Jedis reemplazados por Redisson
Corregido: compatibilidad con JDK 1.6+
Característica: soporte de autorización
Corregido: regresión de transporte de agrupación XHR
Corregido: regresión de transporte de Websocket
Corregido: espacio de nombres NPE en PacketHandler
Corregido: los ejecutores se apagaban durante la parada del servidor.
Característica: compatibilidad con tienda de clientes (Memory, Redis, Hazelcast)
Característica: compatibilidad con transmisión distribuida a través de nodos netty-socketio (Redis, Hazelcast)
Característica: compatibilidad con OSGi (gracias a rdevera)
Mejora: optimización de agrupación XHR
Mejora: se agregó el método SocketIOClient.getAllRooms
Corregido: política flash "solicitud de fuga" después de recargar la página (gracias a ntrp)
Corregido: carga de websocket swf (gracias a ntrp)
Solucionado: las URL incorrectas provocan un posible DDoS
Corregido: la visibilidad del paquete Event.class cambió para evitar el uso directo
Mejora: registro simplificado de módulos Jackson
Corregido - NPE durante el apagado
Mejora: método isEmpty agregado al espacio de nombres
Solucionado: invocación de devolución de llamada de tiempo de espera de confirmación incorrecta
Corregido: serialización bigdecimal para JSON
Corregido: bucle infinito durante la excepción de manejo de paquetes
Corregido: manejo de 'cliente no encontrado'
Mejora: optimización de la asignación de buffers de codificación.
Mejora: los buffers de codificación ahora se agrupan en la memoria para reducir la presión del GC (función netty 4.x).
Corregido: error en propiedad desconocida durante la deserialización.
Corregido: pérdida de memoria en transportes de sondeo largos.
Mejora: registro de información de error con datos entrantes.
Primera versión estable.