Rmessage
1.0.0
Rmessage는 Reactor3를 사용하여 Reactor-Netty 프로젝트에 구축된 실시간 메시지 푸시 API입니다.
Reactor3 란 무엇입니까?
Reactor는 효율적인 수요 관리(예: "배압" 제어) 기능을 갖춘 JVM을 위한 완전히 비차단 반응형 프로그래밍 프레임워크입니다. CompletableFuture, Stream 및 Duration과 같은 Java 8 기능 API와 직접 통합됩니다. 비동기 시퀀스 API Flux([N] 요소용) 및 Mono([0|1] 요소용)를 제공하며 "Reactive Extensions 사양"을 완전히 따르고 구현합니다.
Reactor를 사용하면 어떤 이점이 있나요?
처리량이 높은 순수 비동기 코드를 구축하는 것은 매우 쉽고 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바이트】
클라이언트_유형 | 메시지 유형 |
---|---|
높은 4비트 | 낮은 4비트 |
주제[n바이트]
길이에서 | 길이에 | ~에서 | 에게 |
---|---|---|---|
1바이트 | 1바이트 | n바이트 | n바이트 |
본문 [n바이트]
몸길이 | 몸 |
---|---|
2바이트 | n바이트 |
타임스탬프 |
---|
8바이트 |
FixHeader【1바이트】
클라이언트_유형 | 메시지 유형 |
---|---|
높은 4비트 | 낮은 4비트 |
연결상태 [n바이트]
사용자 길이 | 비밀번호 길이 | 사용자 | 비밀번호 |
---|---|---|---|
1바이트 | 1바이트 | n바이트 | n바이트 |
FixHeader【1바이트】
클라이언트_유형 | 메시지 유형 |
---|---|
높은 4비트 | 낮은 4비트 |
연결상태 [n바이트]
사용자 길이 | 사용자 |
---|---|
1바이트 | n바이트 |
FixHeader【1바이트】
클라이언트_유형 | 메시지 유형 |
---|---|
높은 4비트 | 낮은 4비트 |