โครงการนี้เป็นการใช้งาน Java โอเพ่นซอร์สของเซิร์ฟเวอร์ Socket.IO ขึ้นอยู่กับเฟรมเวิร์กเซิร์ฟเวอร์ 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 >
ความคิดเห็นของลูกค้าใน ปี 2555 :
CentOS, 1 CPU, 4GB RAM ทำงานบน VM: CPU 10%, หน่วยความจำ 15%
เซสชันการโพลยาว 6,000 xhr หรือ 15,000 เซสชัน websockets
4,000 ข้อความต่อวินาที
ความคิดเห็นของลูกค้าใน ปี 2014 :
"เพื่อทดสอบความเครียดของโซลูชัน เราใช้งานไคลเอนต์ websocket พร้อมกัน 30,000 เครื่อง และจัดการได้สูงสุดที่ข้อความรวมประมาณ 140,000 ข้อความต่อวินาที โดยมีความล่าช้าโดยเฉลี่ยน้อยกว่า 1 วินาที" (c) Viktor Endersz - คัมบี สปอร์ต โซลูชั่นส์
วงออเคสตราผู้เล่นหลายคน: Multiplayer-orchestra.com
AVOS คลาวด์: avoscloud.com
โซลูชั่นกีฬา Kambi: kambi.com
ARSnova: arsnova.eu
คุณสมบัติ - เพิ่มการตั้งค่า EnableCors (ขอบคุณ @ zd925)
คุณสมบัติ - ความสามารถในการกำหนดตัวถอดรหัสคำขอ http (ขอบคุณ @gurkancakir)
แก้ไขแล้ว - หาก ack กลับมาหลังจากทริกเกอร์การหมดเวลา IllegalStateException จะถูกโยนทิ้ง (ขอบคุณ @malinGH)
แก้ไข - ป้องกันไม่ให้ไคลเอนต์เชื่อมต่อกับเนมสเปซซ้ำ ๆ (ขอบคุณ @ bigtian99)
แก้ไข - ถือว่าไฟล์แนบเป็นไบนารี่ตามค่าเริ่มต้น (ขอบคุณ @nicsor)
แก้ไข - การจัดการความล้มเหลวในการจับมือที่กู้คืนได้ (ขอบคุณ @berinhardt)
แก้ไข - HashedWheelTimeoutScheduler ควรลบ ScheduleFutures ก่อนดำเนินการงาน (ขอบคุณ @berinhardt)
แก้ไข - เนมสเปซที่กำหนดเองรองรับข้อมูลการตรวจสอบสิทธิ์ (ขอบคุณ @Addi)
แก้ไข - การอ่านบัฟเฟอร์เฟรมสิ่งที่แนบมา
แก้ไข - หน่วยความจำรั่วในขณะที่ WebSocketServerHandshakeException หรือ Channel ล้มเหลว (ขอบคุณ @ h3mant-1)
คุณสมบัติ - การแยกวิเคราะห์ v3/v4 ของหลายข้อความในเนื้อหาการสำรวจ HTTP เดียว (ขอบคุณ @unverbraucht)
แก้ไข - ข้อผิดพลาด IllegalReferenceCountException
แก้ไข - OOM ที่เป็นไปได้ที่เกิดจากการแยกวิเคราะห์ไฟล์แนบ
รองรับ Github Actions โดย @liangyuanpeng
คุณสมบัติ - รองรับโมดูล Java (ขอบคุณ @unverbraucht)
คุณสมบัติ - เพิ่ม AuthTokenListener (ขอบคุณ @unverbraucht)
คุณสมบัติ - รองรับตัวคั่นหลายแพ็กเก็ต (ขอบคุณ @unverbraucht)
การปรับปรุง - ส่งเหตุการณ์การลาจำนวนมากแทนการลาหลายครั้งเมื่อตัดการเชื่อมต่อ (ขอบคุณ @ ksahu750)
แก้ไข - NPE ระหว่างการหมดเวลาตอบสนอง ack (ขอบคุณ @BlueSodaWater)
แก้ไข - การรั่วไหลของทรัพยากรในวิธี readVersion () (ขอบคุณ @ JHOANG23)
คุณสมบัติ - เพิ่มความพร้อมใช้งานเพื่อเพิ่มคู่คีย์-ค่าในการจัดเก็บซ็อกเก็ตระหว่างการอนุญาต (ขอบคุณ @shutuper)
คุณสมบัติ - วิธีการ getRoomOperations() พร้อมพารามิเตอร์ varargs ของห้อง (ขอบคุณ @shutuper)
แก้ไขแล้ว - ลูกค้าไม่สามารถเชื่อมต่อกับเนมสเปซที่ไม่ใช่ค่าเริ่มต้นได้ (ขอบคุณ @lyjnew)
แก้ไข - NPE ใน WebSocketTransport และ PollingTransport (ขอบคุณ @ Hunterk95)
JDK 8 เป็นเวอร์ชันขั้นต่ำที่จำเป็นสำหรับการใช้งาน
แก้ไข - ข้อความที่มีขนาดใหญ่กว่า maxFramePayloadLength ทำให้หน่วยความจำรั่ว
คุณสมบัติ - รองรับโปรโตคอล SocketIO 4.x (ขอบคุณ @HashZhang)
แก้ไขแล้ว - เพิ่มคลาสเฉพาะของ socketio ทั้งหมดลงในบันเดิล (ขอบคุณ @rishabhgup)
แก้ไข - ข้อผิดพลาด io.netty.channel.ChannelPipelineException
คุณสมบัติ - เพิ่มวิธีการ SocketIOClient.isWritable() (ขอบคุณ @ xuwenqing04)
คุณสมบัติ - เพิ่มวิธีการ Namespace.addListeners (Iterable Listeners) (ขอบคุณ @damonxue)
แก้ไข - แพ็กเก็ตเหตุการณ์ตัดการเชื่อมต่อควรเป็นประเภทย่อยของ MESSAGE (ขอบคุณ @MasterShi)
แก้ไขแล้ว - BaseStoreFactory พ่น NPE
คุณสมบัติ - เพิ่มการสนับสนุนสำหรับการเข้าร่วมและออกจำนวนมาก (ขอบคุณ @ ksahu750)
แก้ไข - ยกเลิกการเชื่อมต่ออัตโนมัติ (การถดถอยตั้งแต่ 1.7.22)
คุณสมบัติ - รองรับ ping/pong สำหรับโปรโตคอล socketio v4 (ขอบคุณ @HashZhang)
แก้ไขแล้ว - ควรตรวจสอบชื่อการขนส่งด้วยตัวพิมพ์ใหญ่ (การถดถอยตั้งแต่ 1.7.20)
คุณสมบัติ - เพิ่มการตั้งค่า needClientAuth (ขอบคุณ @huws)
แก้ไข - ContinuationWebSocketFrame ควรใช้หาก payload > maxFramePayloadLength (ขอบคุณ 俞伟搏)
แก้ไข - คลาส src ของผู้ฟังเหตุการณ์และ dest bean ไม่ตรงกัน (ขอบคุณ @cifaz)
แก้ไข - พารามิเตอร์การขนส่งที่ผิดกฎหมาย (ขอบคุณ @ mirus36)
คุณสมบัติ - เพิ่มการตั้งค่า writeBufferWaterMarkLow และ writeBufferWaterMarkHigh (ขอบคุณ @xuminwlt)
คุณสมบัติ - เพิ่มการตั้งค่า AllowHeaders แล้ว (ขอบคุณ @HuangHuan)
คุณสมบัติ - เพิ่มวิธีการ getCurrentRoomSize() (ขอบคุณ @ sunxiaoyu3)
แก้ไข - ข้อผิดพลาดเนมสเปซ (ขอบคุณ @@johntyty912)
แก้ไขแล้ว - หลายโหนดที่มี Redisson ได้รับข้อความเดียวกัน (ขอบคุณ 梁嘉祺)
แก้ไข - หลายโหนดได้รับข้อความ LEAVE เดียวเท่านั้นเมื่อไคลเอนต์ตัดการเชื่อมต่อ (ขอบคุณ @ GaryLeung922)
คุณสมบัติ - รองรับตัวดักจับเหตุการณ์ซึ่งจับทุกเหตุการณ์ (ขอบคุณ @yosiat)
แก้ไข - การออกอากาศกิจกรรมเนมสเปซ (ขอบคุณ Volodymyr Masliy)
คุณสมบัติ - เพิ่มการตั้งค่า RandomSession ให้กับวัตถุ Config (ขอบคุณ @yuanxiangz)
แก้ไข - NPE ใน WebSocketTransport
แก้ไข - NPE และหน่วยความจำรั่ว (ขอบคุณ zhaolianwang)
แก้ไข - การแยกวิเคราะห์เนมสเปซ (ขอบคุณ Redliver)
แก้ไขแล้ว - ความเข้ากันได้ของ Redisson 3.9+
แก้ไข - การจัดการ ACK ที่ไม่ปลอดภัยสำหรับเธรด (ขอบคุณ @dawnbreaks)
แก้ไข - ช่องโพลยาวที่ไม่ได้ใช้งานทำให้หน่วยความจำรั่ว (ขอบคุณ @dawnbreaks)
แก้ไข - การประมวลผล websocket CloseFrame (ขอบคุณ @ hangsu.cho)
แก้ไขแล้ว - WebSocketTransport NPE
แก้ไขแล้ว - รหัสเซสชันไม่ซ้ำกันอีกต่อไป
แก้ไข - แก้ไขการเชื่อมต่อพื้นฐานที่ไม่ปิดเมื่อหมดเวลา ping
แก้ไขแล้ว - ปัญหา "fin_close"
คุณสมบัติ - เพิ่มที่อยู่ซ็อกเก็ตท้องถิ่นสำหรับการเชื่อมต่อ (ขอบคุณ @SergeyGrigorev)
คุณสมบัติ - เพิ่มวิธี addPingListener
(ขอบคุณ @lovebing)
คุณสมบัติ - เพิ่ม ThreadFactory สำหรับ HashedWheelTimer (ขอบคุณ @ hand515)
แก้ไข - เปลี่ยน SO_LINGER เพื่อจัดการเป็นช่องลูก (ไม่ใช่ช่องเซิร์ฟเวอร์) ตัวเลือก (ขอบคุณ @robymus)
แก้ไข - ByteBuf รั่วไหลหากใช้ไฟล์แนบแบบไบนารี
แก้ไข - กู้คืนเซสชันจากคุกกี้ (ขอบคุณ @wuxudong)
แก้ไข - NumberFormatException เมื่อ b64 เป็นค่าบูล (ขอบคุณ @vonway)
แก้ไข - การเข้ารหัสข้อมูลสำหรับการขนส่งแบบโพล
คุณสมบัติ - เพิ่มตัวเลือกในการเปลี่ยน SSL KeyFactoryAlgorithm โดยใช้การกำหนดค่า (ขอบคุณ @robymus)
การปรับปรุง - การปรับปรุงการจัดการ Binary ack (ขอบคุณ Sergey Bushik)
แก้ไขแล้ว - ไม่สามารถทำเครื่องหมายสัญญาว่าสำเร็จได้เนื่องจากสำเร็จแล้ว (ขอบคุณ @robymus)
คุณลักษณะ - เพิ่มวิธีการ SocketIOServer.removeAllListeners
คุณลักษณะ - วิธี BroadcastOperations.sendEvent
พร้อมพารามิเตอร์ excludedClient
ที่เพิ่มเข้ามา
การปรับปรุง - Redisson อัปเดตเป็น 2.4.0
แก้ไข - หน่วยความจำรั่วในวัตถุ Namespace (ขอบคุณ @ CrazyIvan007)
แก้ไข - โยนข้อผิดพลาดหากไม่รองรับการขนส่ง
แก้ไข - ไคลเอ็นต์ตัดการเชื่อมต่อเมื่อใช้ Polling - IndexOutOfBoundsException
แก้ไขแล้ว - netty อัปเดตเป็นเวอร์ชัน 4.1.0.CR3
แก้ไข - การแยกวิเคราะห์แพ็คเก็ตไบนารี (ขอบคุณ Winston Li)
คุณลักษณะ - รองรับการบีบอัด
แก้ไข - การจัดการคำขอไคลเอ็นต์ DotNET
แก้ไข - การแยกวิเคราะห์รูปแบบความยาวแพ็คเก็ต
แก้ไขแล้ว - ข้าม 'd=' ในแพ็กเก็ต
แก้ไขแล้ว - ไคลเอ็นต์การสำรวจความคิดเห็นจะถูกตัดการเชื่อมต่อก่อนเวลาอันควร (ขอบคุณ lpage30)
แก้ไขแล้ว - การเชื่อมต่อจะยังคงเปิดอยู่ตลอดไปหากเซิร์ฟเวอร์ส่งแพ็กเก็ต close
แก้ไขแล้ว - ความเข้ากันได้กับ Redisson เวอร์ชันล่าสุด
การปรับปรุง - WebSocketServerHandshaker.allowExtensions
เป็น true
ในขณะนี้
การปรับปรุง - การใช้งานคุกกี้ SessionID (ขอบคุณ @ryandietrich)
แก้ไข - ห้องไคลเอนต์รั่ว (ขอบคุณ @andreaspalm)
แก้ไข - ExceptionListener ไม่ได้ใช้สำหรับข้อผิดพลาดในการแยกวิเคราะห์ JSON
แก้ไข - การโจมตี "ช่องทางเงียบ"
การปรับปรุง - เพิ่มพารามิเตอร์ useStrictOrdering
สำหรับการสั่งซื้อแพ็กเก็ต websocket อย่างเข้มงวด
การปรับปรุง - FAIL_ON_EMPTY_BEANS = false
ที่ตั้งค่าในตัวถอดรหัส json
การปรับปรุง - ไม่จำเป็นต้องเพิ่ม jackson lib หากคุณใช้ JsonSupport impl ของตัวเอง
แก้ไข - รองรับไคลเอนต์ SocketIO 1.3.x
แก้ไข - การจัดการการเข้ารหัส Charset (ขอบคุณ alim-akbashev)
การปรับปรุง - เพิ่ม SocketIONamespace.getName()
แล้ว
แก้ไข - การรวมเฟรม WebSocket
แก้ไข - การปล่อยบัฟเฟอร์ WebSocket
แก้ไขแล้ว - Unexpected end-of-input in VALUE_STRING
แก้ไขแล้ว - Access-Control-Allow-Credentials เป็นจริงสำหรับคำขอที่มีส่วนหัวต้นกำเนิด
คุณลักษณะ - เพิ่มพารามิเตอร์ Configuration.sslProtocol
แล้ว
แก้ไข - การจัดการการรับ BinaryEvent
แก้ไข - BinaryEvent ไม่ใช่การเข้ารหัส / ถอดรหัส b64
แก้ไข - บัฟเฟอร์รั่วระหว่างการเข้ารหัสแพ็คเก็ต
แก้ไข - การเข้ารหัสแพ็คเก็ต
แก้ไข - การเข้ารหัส / ถอดรหัส BinaryEvent
แก้ไขแล้ว - การจัดการการเชื่อมต่อที่ไม่มีใครทักท้วง
คุณสมบัติ - เพิ่มการตั้ง origin
แล้ว
คุณลักษณะ - เพิ่มการตั้งค่า crossDomainPolicy
คุณลักษณะ - เพิ่มวิธีการ SocketIOServer.startAsync
คุณลักษณะ - การสนับสนุน Epoll
การปรับปรุง - การสนับสนุน BinaryEvent
แก้ไข - การจัดการการตัดการเชื่อมต่อ SocketIOClient
แก้ไข - โทรกลับออกอากาศ
แก้ไขแล้ว - NPE ไม่มีการกำหนดการขนส่งระหว่างการตรวจสอบสิทธิ์
แก้ไข - หมดเวลา ping สำหรับการขนส่งแบบสำรวจ
แก้ไข - บัฟเฟอร์รั่วใน PacketEncoder
แก้ไข - การเข้ารหัสข้อความขาออกไม่ถูกต้องโดยใช้การขนส่ง websocket
แก้ไข - NPE ในการขนส่ง websocket
แก้ไขแล้ว - การถอดรหัสแพ็คเก็ตหลายรายการในการขนส่งแบบโพล
แก้ไขแล้ว - บัฟเฟอร์รั่ว
คุณสมบัติ - ความสามารถในการตั้งค่า Access-Control-Allow-Origin
แบบกำหนดเองผ่าน Configuration.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 ถูกลบออก
คุณสมบัติ - รองรับ Spring beans ที่มีคำอธิบายประกอบผ่าน SpringAnnotationScanner
คุณลักษณะ - ผู้ฟังข้อยกเว้นทั่วไป
การปรับปรุง - ScheduledExecutorService แทนที่ด้วย HashedWheelTimer
แก้ไข - การจัดการยกเลิกการเชื่อมต่อไคลเอ็นต์เนมสเปซผิด
แก้ไขแล้ว - ข้อยกเว้นในวิธี onConnect/onDisconnect/isAuthorized ทำให้เซิร์ฟเวอร์หยุดทำงาน
การทำลายการเปลี่ยนแปลง API - ลายเซ็นวิธีการ SocketIOClient.sendEvent มีการเปลี่ยนแปลง
การปรับปรุง - รองรับเหตุการณ์หลายประเภทผ่าน MultiTypeEventListener และคำอธิบายประกอบ OnEvent
การปรับปรุง - รองรับเหตุการณ์หลายประเภทผ่าน MultiTypeAckCallback
การปรับปรุง - เพิ่มวิธีการ SocketIOClient.getHandshakeData
การปรับปรุง - เจไดถูกแทนที่ด้วยเรดิสสัน
แก้ไข - ความเข้ากันได้ของ JDK 1.6+
คุณสมบัติ - การสนับสนุนการอนุญาต
แก้ไข - การถดถอยการขนส่ง XHR-pooling
แก้ไข - การถดถอยการขนส่ง Websocket
แก้ไข - เนมสเปซ NPE ใน PacketHandler
แก้ไข - ตัวดำเนินการปิดตัวลงระหว่างที่เซิร์ฟเวอร์หยุดทำงาน
คุณสมบัติ - รองรับร้านค้าลูกค้า (หน่วยความจำ, Redis, Hazelcast)
คุณลักษณะ - กระจายการออกอากาศผ่านโหนด netty-socketio (Redis, Hazelcast)
คุณสมบัติ - รองรับ OSGi (ขอบคุณ rdevera)
การปรับปรุง - การเพิ่มประสิทธิภาพการรวม XHR
การปรับปรุง - เพิ่มวิธีการ SocketIOClient.getAllRooms
แก้ไข - นโยบายแฟลช "คำขอรั่วไหล" หลังจากโหลดหน้าใหม่ (ขอบคุณ ntrp)
แก้ไข - กำลังโหลด websocket swf (ขอบคุณ ntrp)
แก้ไขแล้ว - URL ที่ไม่ถูกต้องทำให้เกิด DDoS ที่อาจเกิดขึ้น
แก้ไข - การมองเห็นแพ็คเกจ Event.class เปลี่ยนไปเพื่อหลีกเลี่ยงการใช้งานโดยตรง
การปรับปรุง - การลงทะเบียนโมดูล Jackson แบบง่าย
แก้ไข - NPE ระหว่างการปิดระบบ
การปรับปรุง - เพิ่มวิธีการ isEmpty ใน Namespace
แก้ไข - การเรียกใช้การโทรกลับการหมดเวลา ack ผิด
แก้ไข - การทำให้เป็นอนุกรมทศนิยมขนาดใหญ่สำหรับ JSON
แก้ไข - วนรอบอนันต์ระหว่างข้อยกเว้นการจัดการแพ็กเก็ต
แก้ไข - การจัดการ 'ไม่พบไคลเอนต์'
การปรับปรุง - การเพิ่มประสิทธิภาพการจัดสรรบัฟเฟอร์การเข้ารหัส
การปรับปรุง - ขณะนี้บัฟเฟอร์การเข้ารหัสรวมอยู่ในหน่วยความจำเพื่อลดแรงกดดันของ GC (ฟีเจอร์ netty 4.x)
แก้ไข - ข้อผิดพลาดในคุณสมบัติที่ไม่รู้จักระหว่างการดีซีเรียลไลซ์
แก้ไข - หน่วยความจำรั่วในการส่งโพลแบบยาว
การปรับปรุง - ข้อมูลข้อผิดพลาดในการบันทึกข้อมูลขาเข้า
การเปิดตัวครั้งแรกที่เสถียร