هذا المشروع عبارة عن تطبيق Java مفتوح المصدر لخادم Switch.IO. استنادًا إلى إطار عمل خادم Netty.
مرخص بموجب ترخيص أباتشي 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، وحدة معالجة مركزية واحدة، ذاكرة وصول عشوائي سعتها 4 جيجابايت تعمل على VM: وحدة المعالجة المركزية 10%، الذاكرة 15%
6000 جلسة اقتراع مدتها XHR أو 15000 جلسة websockets
4000 رسالة في الثانية
آراء العملاء في عام 2014 :
"لاختبار الضغط على الحل، قمنا بتشغيل 30000 عميل websocket متزامن وتمكنا من الوصول إلى الذروة بإجمالي حوالي 140000 رسالة في الثانية مع أقل من ثانية واحدة في المتوسط." (ج) فيكتور إندرس - شركة كامبي للحلول الرياضية
أوركسترا متعددة اللاعبين: multiplayer-orchestra.com
سحابة أفوس: avoscloud.com
حلول كامبي الرياضية: kambi.com
موقع آرسنوفا: arsnova.eu
الميزة - تمت إضافة إعداد EnableCors (بفضل @zd925)
الميزة - القدرة على تحديد وحدة فك ترميز طلب http (بفضل @gurkancakir)
تم الإصلاح - إذا عاد الإشعار بعد انتهاء المهلة، فسيتم طرح IllegalStateException (بفضل @malinGH)
تم الإصلاح - يمنع العميل من الاتصال بشكل متكرر بمساحة الاسم (بفضل @bigtian99)
تم الإصلاح - التعامل مع المرفقات على أنها ثنائية بشكل افتراضي (بفضل @nicsor)
تم إصلاحه - التعامل مع فشل المصافحة القابل للاسترداد (بفضل @berinhardt)
تم الإصلاح - يجب أن يزيل HashedWheelTimeoutScheduler العقود المستقبلية المجدولة قبل تنفيذ المهمة (بفضل @berinhardt)
تم الإصلاح - تدعم مساحات الأسماء المخصصة بيانات المصادقة (بفضل @Addi)
تم إصلاح - قراءة المخزن المؤقت لإطار المرفقات
تم إصلاح - تسرب الذاكرة أثناء فشل WebSocketServerHandshakeException أو القناة (بفضل @h3mant-1)
الميزة - تحليل v3/v4 لرسائل متعددة في نص استقصاء HTTP واحد (بفضل @unverbraucht)
تم إصلاح - خطأ IllegalReferenceCountException
تم إصلاح - احتمال حدوث OOM بسبب تحليل المرفقات
دعم Github Actions مقدم من @liangyuanpeng
الميزة - دعم وحدة Java (بفضل @unverbraucht)
الميزة - تمت إضافة AuthTokenListener (بفضل @unverbraucht)
الميزة - دعم فاصل الحزم المتعددة (بفضل @unverbraucht)
التحسين - إرسال حدث الإجازة المجمعة بدلاً من أحداث الإجازة المتعددة عند قطع الاتصال (بفضل @ksahu750)
تم الإصلاح - NPE أثناء مهلة استجابة الإشعار (بفضل @BlueSodaWater)
تم إصلاح - تسرب الموارد في طريقة readVersion() (بفضل @JHOANG23)
الميزة - تمت إضافة التوفر لإضافة أزواج قيمة المفتاح إلى مخزن المقبس أثناء الترخيص (بفضل @shutuper)
الميزة - طريقة getRoomOperations() مع الغرفة varargs param (بفضل @shutuper)
تم الإصلاح - لا يمكن للعميل الاتصال بمساحة الاسم غير الافتراضية (بفضل @lyjnew)
تم إصلاح - NPE في WebSocketTransport وPollingTransport (بفضل @Hunterk95)
JDK 8 هو الإصدار الأدنى المطلوب للاستخدام.
تم الإصلاح - تتسبب الرسالة الأكبر من maxFramePayloadLength في حدوث تسرب للذاكرة
الميزة - دعم بروتوكول SwitchIO 4.x (بفضل @HashZhang)
تم الإصلاح - إضافة جميع الفئات الخاصة بـsocketio إلى الحزم (بفضل @rishabhgup)
تم إصلاح - خطأ io.netty.channel.ChannelPipelineException
الميزة - تمت إضافة طريقة ()SocketIOClient.isWritable (شكرًا @xuwenqing04)
الميزة - تمت إضافة طريقة Namespace.addListeners(المستمعين القابلين للتكرار) (شكرًا @damonxue)
تم الإصلاح - يجب أن تكون حزمة حدث قطع الاتصال نوعًا فرعيًا من MESSAGE (شكرًا @MasterShi)
تم الإصلاح – يقوم BaseStoreFactory بإلقاء NPE
الميزة - تمت إضافة دعم للانضمام والمغادرة المجمعة (شكرًا @ksahu750)
ثابت - قطع الاتصال التلقائي (الانحدار منذ 1.7.22)
الميزة - دعم ping/pong لبروتوكول المقبس v4 (بفضل @HashZhang)
تم الإصلاح - يجب تحديد اسم النقل بأحرف كبيرة (الانحدار منذ 1.7.20)
الميزة - تمت إضافة إعداد needClientAuth (بفضل @huws)
تم الإصلاح - يجب استخدام ContinuationWebSocketFrame إذا كانت الحمولة > maxFramePayloadLength (بفضل 俞伟搏)
تم إصلاح - عدم تطابق فئة src لمستمع الأحداث وحبة dest (بفضل @cifaz)
تم إصلاح - معلمة النقل غير القانوني (بفضل @mirus36)
الميزة - تمت إضافة إعدادات writeBufferWaterMarkLow وwriteBufferWaterMarkHigh (بفضل @xuminwlt)
الميزة - تمت إضافة إعداد "allowHeaders" (بفضل @HuangHuan)
الميزة - تمت إضافة طريقة getCurrentRoomSize() (بفضل @sunxiaoyu3)
تم إصلاح - خطأ في مساحة الاسم (بفضل @@johntyty912)
تم إصلاح - تتلقى العقد المتعددة مع redisson نفس الرسالة (بفضل 梁嘉祺)
تم الإصلاح - تتلقى العقد المتعددة رسالة LEAVE واحدة فقط عند قطع اتصال العميل (بفضل @GaryLeung922)
الميزة - دعم اعتراضات الأحداث التي تلتقط جميع الأحداث (بفضل @yosiat)
تم إصلاح - بث حدث مساحة الاسم (بفضل Volodymyr Masliy)
الميزة - تمت إضافة إعداد RandomSession إلى كائن التكوين (بفضل @yuanxiangz)
تم الإصلاح - NPE في WebSocketTransport
تم إصلاح - تسرب NPE والذاكرة (بفضل zhaolianwang)
تم إصلاح - تحليل مساحة الاسم (بفضل Redliver)
ثابت - التوافق مع Redisson 3.9+
تم إصلاحه - التعامل مع ACK غير الآمن (بفضل @dawnbreaks)
تم إصلاح - تتسبب قنوات الاقتراع الطويلة غير النشطة في حدوث تسرب للذاكرة (بفضل @dawnbreaks)
تم إصلاح - معالجة websocket CloseFrame (بفضل @hangsu.cho)
تم الإصلاح - WebSocketTransport NPE
تم الإصلاح - لم يعد معرف الجلسة فريدًا بعد الآن
تم الإصلاح - تم إصلاح عدم إغلاق الاتصال الأساسي عند انتهاء مهلة اختبار الاتصال
تم إصلاح - مشكلة "fin_Close".
الميزة - تمت إضافة عنوان مأخذ التوصيل المحلي للاتصال (بفضل @SergeyGrigorev)
الميزة - تمت إضافة طريقة addPingListener
(بفضل @lovebing)
الميزة - إضافة ThreadFactory لـ HashedWheelTimer (بفضل @hand515)
تم الإصلاح - تم تغيير SO_LINGER ليتم التعامل معه كخيار قناة فرعية (وليس قناة خادم) (بفضل @robymus)
تم إصلاح - تسرب ByteBuf في حالة استخدام المرفقات الثنائية
تم إصلاح - استعادة الجلسة من ملف تعريف الارتباط (بفضل @wuxudong)
تم إصلاح - NumberFormatException عندما تكون b64 قيمة منطقية (بفضل @vonway)
تم إصلاح - ترميز البيانات لنقل الاقتراع
الميزة - تمت إضافة خيار لتغيير SSL KeyFactoryAlgorithm باستخدام التكوين (بفضلrobymus)
التحسين - تحسينات في التعامل مع الرافعة الثنائية (بفضل سيرجي بوشيك)
تم الإصلاح - فشل تحديد الوعد على أنه نجاح لأنه نجح بالفعل (بفضل @robymus)
الميزة - تمت إضافة طريقة SocketIOServer.removeAllListeners
الميزة - طريقة BroadcastOperations.sendEvent
مع إضافة معلمة excludedClient
التحسين - تم تحديث Redisson إلى الإصدار 2.4.0
تم إصلاح - تسرب الذاكرة في كائن مساحة الاسم (بفضل @CrazyIvan007)
تم إصلاح - حدوث خطأ في حالة عدم دعم النقل
تم الإصلاح - قطع اتصال العميل عند استخدام الاستقصاء - IndexOutOfBoundsException
تم الإصلاح - تم تحديث netty إلى الإصدار 4.1.0.CR3
تم إصلاح - تحليل الحزم الثنائية (بفضل Winston Li)
الميزة - دعم الضغط
تم الإصلاح - التعامل مع طلب عميل DotNET
ثابت - تحليل تنسيق طول الحزمة
تم إصلاح - تخطي 'd=' في الحزمة
تم إصلاح - انقطاع اتصال عملاء الاستطلاع بشكل متقطع قبل الأوان (بفضل lpage30)
تم الإصلاح - تظل الاتصالات مفتوحة إلى الأبد إذا أرسل الخادم حزمة close
ثابت - التوافق مع أحدث إصدار من Redisson
التحسين - أصبح WebSocketServerHandshaker.allowExtensions
true
الآن
التحسين - تنفيذ ملف تعريف الارتباط SessionID (بفضل @ryandietrich)
تم إصلاح - تسرب ClientRooms (بفضل @andreaspalm)
تم إصلاح - عدم استخدام ExceptionListener للأخطاء في تحليل JSON
تم إصلاح - هجوم "القناة الصامتة".
التحسين - تمت إضافة معلمة useStrictOrdering
لترتيب حزم websocket بشكل صارم
التحسين - FAIL_ON_EMPTY_BEANS = false
في وحدة فك ترميز json
التحسين - لا حاجة لإضافة jackson lib إذا كنت تستخدم JsonSupport impl
تم الإصلاح - دعم الإصدار 1.3.x من عميل SwitchIO
تم إصلاح - معالجة ترميز مجموعة الأحرف (بفضل alim-akbashev)
التحسين - تمت إضافة SocketIONamespace.getName()
تم إصلاح - تجميع إطارات WebSocket
تم الإصلاح - إصدار المخزن المؤقت لـ WebSocket
تم إصلاح - خطأ Unexpected end-of-input in VALUE_STRING
تم الإصلاح - يكون Access-Control-Allow-Credentials صحيحًا للطلبات ذات الرأس الأصلي
الميزة - تمت إضافة معلمة Configuration.sslProtocol
تم الإصلاح - التعامل مع BinaryEvent ack
تم إصلاح - ترميز/فك تشفير BinaryEvent غير b64
تم إصلاح - تسرب المخزن المؤقت أثناء تشفير الحزمة
ثابت - ترميز الحزمة
تم إصلاح - ترميز/فك تشفير BinaryEvent
ثابت - التعامل مع الاتصالات دون منازع
الميزة - تمت إضافة إعداد origin
الميزة - تمت إضافة إعداد crossDomainPolicy
الميزة - تمت إضافة طريقة SocketIOServer.startAsync
الميزة - دعم Epoll
التحسين - دعم BinaryEvent
تم الإصلاح - التعامل مع قطع اتصال SwitchIOClient
ثابت - رد اتصال البث
تم الإصلاح - NPE ثم لم يتم تحديد النقل أثناء المصادقة
تم إصلاح - انتهاء مهلة ping لنقل الاقتراع
تم إصلاح - تسرب المخزن المؤقت في PacketEncoder
تم إصلاح - ترميز خاطئ للرسائل الصادرة باستخدام نقل websocket
تم الإصلاح - NPE في نقل websocket
تم الإصلاح - فك تشفير الحزم المتعددة في نقل الاقتراع
ثابت - تسرب المخزن المؤقت
الميزة - القدرة على ضبط Access-Control-Allow-Origin
المخصص عبر Configuration.origin
تم إصلاح - الاتصال عبر عميل CLI مقبس io
الميزة - دعم بروتوكول المقبس.IO 1.0. بفضل البروتوكول الجديد، تم تسريع عملية فك التشفير/الترميز
تم إسقاطه - أساليب SocketIOClient.sendMessage
و SocketIOClient.sendJsonObject
والمستمعين المقابلين
تم إسقاطه - دعم نقل Flashsocket
تم إسقاطه - إصدار البروتوكول 0.7 ... 0.9.16
التحسين - تم تحسين ترميز الحزمة الفردية، ويستخدم في الغالب في نقل WebSocket. تم تقليل وقت التشفير بنسبة تصل إلى 40% (بفضل Viktor Endersz)
التحسين - تم تحسين التعامل مع الغرف
التحسين - تمت إضافة طريقة ExceptionListener.exceptionCaught
كسر تغيير واجهة برمجة التطبيقات - تم استبدال Configuration.autoAck بـ ackMode
الميزة - تمت إضافة إعداد TrustStore
الميزة - تمت إضافة إعداد maxFramePayloadLength
الميزة - تمت إضافة أساليب getAllClients وgetClient إلى SwitchIONamespace
تم إصلاح - يقوم SwitchIOServer.getAllClients بإرجاع مبلغ عملاء خاطئ
ثابت - مشكلة إصدار الرسالة
تم إصلاح - مشكلة في إعادة تعريف تكوين مستمع الاستثناء
كسر تغيير واجهة برمجة التطبيقات - يقوم DataListener.onData الآن بطرح استثناء
التحسين - تمت إضافة معلمة البيانات إلى مستمع الاستثناء
التحسين - القدرة على إعداد تكوين المقبس
التحسين - تمت إضافة معلمة Configuration.autoAck
تم الإصلاح - معالجة AckCallback أثناء قطع اتصال العميل
تم إصلاح - تم تغيير رمز HTTP للمصافحة غير المصرح بها إلى 401
تغيير جذري لواجهة برمجة التطبيقات - تمت إزالة إعداد Configuration.heartbeatThreadPoolSize
الميزة - دعم فاصوليا الربيع المشروحة عبر SpringAnnotationScanner
الميزة - مستمع الاستثناء الشائع
التحسين - تم استبدال ScheddedExecutorService بـ HashedWheelTimer
تم إصلاح - معالجة قطع اتصال عميل مساحة الاسم الخاطئة
تم الإصلاح - يؤدي الاستثناء في أساليب onConnect/onDisconnect/isAuthorized إلى تعليق الخادم
تغيير جذري لواجهة برمجة التطبيقات - تم تغيير توقيع أساليب SwitchIOClient.sendEvent
التحسين - دعم الأحداث متعددة الأنواع عبر التعليق التوضيحي MultiTypeEventListener و OnEvent
التحسين - تدعم الأحداث متعددة الأنواع الدعم عبر MultiTypeAckCallback
التحسين - تمت إضافة طريقة JackIOClient.getHandshakeData
التحسين - تم استبدال Jedis بـ Redisson
ثابت - توافق JDK 1.6+
الميزة - دعم الترخيص
تم الإصلاح - انحدار نقل تجميع XHR
تم الإصلاح - انحدار نقل Websocket
تم إصلاح - مساحة الاسم NPE في PacketHandler
تم إصلاح - إيقاف تشغيل المنفذين أثناء توقف الخادم
الميزة - دعم متجر العملاء (Memory، Redis، Hazelcast).
الميزة - دعم البث الموزع عبر عقد netty-socketio (Redis وHazelcast).
الميزة - دعم OSGi (بفضل rdevera)
التحسين - تحسين تجميع XHR
التحسين - تمت إضافة طريقة SwitchIOClient.getAllRooms
تم إصلاح - سياسة الفلاش "طلب التسرب" بعد إعادة تحميل الصفحة (بفضل ntrp)
تم إصلاح - تحميل websocket swf (بفضل NTRP)
تم إصلاح - تسبب عناوين URL الخاطئة احتمالية حدوث DDoS
تم إصلاح - تم تغيير رؤية حزمة Event.class لتجنب الاستخدام المباشر
التحسين - تسجيل وحدات جاكسون المبسطة
تم الإصلاح - NPE أثناء إيقاف التشغيل
التحسين - تمت إضافة طريقة isEmpty إلى مساحة الاسم
تم إصلاح - استدعاء رد اتصال خاطئ لمهلة ack
ثابت - التسلسل العشري الكبير لـ JSON
تم إصلاح - استثناء حلقة اللانهاية أثناء معالجة الحزم
تم إصلاح - التعامل مع "لم يتم العثور على العميل".
التحسين - تحسين تخصيص المخازن المؤقتة للترميز.
التحسين - تم الآن تجميع مخازن الترميز المؤقتة في الذاكرة لتقليل ضغط GC (ميزة netty 4.x).
تم إصلاح - خطأ في خاصية غير معروفة أثناء إلغاء التسلسل.
تم إصلاح - تسرب الذاكرة أثناء نقل الاستقصاء الطويل.
التحسين - تسجيل معلومات الخطأ مع البيانات الواردة.
أول إصدار مستقر.