Rmessage عبارة عن واجهة برمجة تطبيقات لدفع الرسائل في الوقت الفعلي مبنية على مشروع المفاعل الصافي باستخدام Reactor3.
ما هو المفاعل 3؟
Reactor عبارة عن إطار عمل برمجي تفاعلي غير محظور تمامًا لـ JVM، مع إدارة الطلب بكفاءة (أي التحكم في إمكانات "الضغط الخلفي"). إنه يتكامل مباشرة مع واجهات برمجة التطبيقات الوظيفية Java 8 مثل CompletableFuture، وStream، وDuration. يوفر تسلسل API Flux غير المتزامن (للعناصر [N]) والأحادية (للعناصر [0|1])، ويتبع وينفذ "مواصفات الامتدادات التفاعلية" بشكل كامل.
ما هي فوائد استخدام المفاعل؟
من السهل جدًا إنشاء تعليمات برمجية غير متزامنة نقية عالية الإنتاجية، ويمكنها دمج مشاريع Spring5 [webflux] بسلاسة.
لاستخدام Rmessage، تحتاج إلى إدارة علاقات المستخدمين الجماعية خارجيًا ولا يوفر Rmessage الثبات. يمكن للاختبارات استخدام ذاكرة المعالج الافتراضية للاحتفاظ بالرسائل غير المتصلة بالإنترنت. تم تطوير المشروع بأكمله باستخدام أفكار برمجة غير متزامنة بحتة، بهدف تعلم البرمجة التفاعلية.
ServerStart
. builder ()
. tcp ()
. ip ( "127.0.0.1" )
. port ( 1888 )
. onReadIdle ( 10000l ) //设置读心跳时间
. onWriteIdle ( 10000l ) //设置写心跳时间
. option ( ChannelOption . SO_RCVBUF , 1023 )
. interceptor ( frame -> frame , frame -> frame ) // 拦截所有message
. setAfterChannelInit ( channel -> { // channel设置
})
. connect ()
. cast ( TcpServerSession . class )
. subscribe ( session ->{
session . addGroupHandler ( groupId -> null ). subscribe ();
session . addOfflineHandler ( new DefaultOffMessageHandler ()). subscribe ();
session . addUserHandler ( new DefaultUserTransportHandler ());
});
ClientStart
. builder ()
. tcp ()
. ip ( "127.0.0.1" )
. port ( 1888 )
. userId ( "21344" ) //设置用户名
. password ( "12312" ) //设置密码
. onReadIdle ( 10000l ,()->()-> System . out . println ( "心跳了" )) //设置读心跳,以及设置回调runner
. setClientType ( ClientType . Ios ) //设置客户端类型
. setAfterChannelInit ( channel -> {
// channel设置
})
. connect ()
. cast ( TcpClientSession . class )
. subscribe ( session ->{
session . sendPoint ( "123" , "测试一下哦" ). subscribe (); //发送单聊消息
session . sendGroup ( "group1" , "123" ). subscribe (); // 发送群聊消息
session . accept ( message -> {
}); // 接受所有消息
});
FixHeader[1 بايت]
client_type | message_type |
---|---|
عالية 4 بت | 4 بت منخفضة |
الموضوع [n بايت]
من الطول | إلى الطول | من | ل |
---|---|---|---|
1 بايت | 1 بايت | ن بايت | ن بايت |
النص [ن بايت]
طول الجسم | جسم |
---|---|
2 بايت | ن بايت |
الطابع الزمني |
---|
8 بايت |
FixHeader[1 بايت]
client_type | message_type |
---|---|
عالية 4 بت | 4 بت منخفضة |
حالة الاتصال [n بايت]
طول المستخدم | طول كلمة المرور | مستخدم | كلمة المرور |
---|---|---|---|
1 بايت | 1 بايت | ن بايت | ن بايت |
FixHeader[1 بايت]
client_type | message_type |
---|---|
عالية 4 بت | 4 بت منخفضة |
حالة الاتصال [n بايت]
طول المستخدم | مستخدم |
---|---|
1 بايت | ن بايت |
FixHeader[1 بايت]
client_type | message_type |
---|---|
عالية 4 بت | 4 بت منخفضة |