Reactor Netty 참조 안내서 - 3.TCP 서버
Reactor Netty 참조 안내서 카탈로그
원문 주소 Reactor Netty
은 사용과 구성이 간편한 TcpServer을 제공합니다.이것은 TCP
서버를 만드는 데 필요한 대부분의 Netty
의 기능을 숨기고 Reactive Streams
의 배압을 증가시켰다.
3.1.시작 및 중지 TCP
서버를 시작하려면 TcpServer 실례 대상을 만들고 설정해야 합니다.기본적으로 host
은 모든 로컬 주소로 구성되어 있으며, bind
작업을 수행할 때 임시 포트를 선택합니다.다음은 TcpServer
인스턴스를 만들고 구성하는 예입니다.
https://github.com/reactor/re... import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create() //<1>
.bindNow(); //<2>
server.onDispose()
.block();
}
}
<1> 설정 작업에 사용할 TcpServer 실례를 만듭니다.
<2> 초기화가 완료될 때까지 기다림을 막는 방식으로 서버를 시작합니다.
반환된 DisposableServer은 간단한 서버 API를 제공합니다. disposeNow()을 포함하여 이 방법은 대기를 막는 방식으로 서버를 닫을 수 있습니다.
3.1.1.Host 및 Port
특정 host
및 port
을 설정하려면 다음 방법으로 TCP
서버를 구성할 수 있습니다.
https://github.com/reactor/re... import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.host("localhost") //<1>
.port(8080) //<2>
.bindNow();
server.onDispose()
.block();
}
}
<1> TCP
서버의host 설정
<2> TCP
서버의port 구성
3.2.사전 초기화
기본적으로 TcpServer
의 자원 초기화 작업은 사용해야 할 때에만 진행됩니다.이것은 로딩을 초기화할 때 bind operation
이 추가 시간을 차지한다는 것을 의미합니다.
TCP
서버를 시작하려면 TcpServer 실례 대상을 만들고 설정해야 합니다.기본적으로 host
은 모든 로컬 주소로 구성되어 있으며, bind
작업을 수행할 때 임시 포트를 선택합니다.다음은 TcpServer
인스턴스를 만들고 구성하는 예입니다.https://github.com/reactor/re...
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create() //<1>
.bindNow(); //<2>
server.onDispose()
.block();
}
}
<1> 설정 작업에 사용할 TcpServer 실례를 만듭니다.
<2> 초기화가 완료될 때까지 기다림을 막는 방식으로 서버를 시작합니다.
반환된 DisposableServer은 간단한 서버 API를 제공합니다. disposeNow()을 포함하여 이 방법은 대기를 막는 방식으로 서버를 닫을 수 있습니다.
3.1.1.Host 및 Port
특정
host
및 port
을 설정하려면 다음 방법으로 TCP
서버를 구성할 수 있습니다.https://github.com/reactor/re...
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.host("localhost") //<1>
.port(8080) //<2>
.bindNow();
server.onDispose()
.block();
}
}
<1>
TCP
서버의host 설정<2>
TCP
서버의port 구성3.2.사전 초기화
기본적으로 TcpServer
의 자원 초기화 작업은 사용해야 할 때에만 진행됩니다.이것은 로딩을 초기화할 때 bind operation
이 추가 시간을 차지한다는 것을 의미합니다.
OpenSsl
사용시)TcpServer
을 구성할 수 있습니다.https://github.com/reactor/re...
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
TcpServer tcpServer =
TcpServer.create()
.handle((inbound, outbound) -> inbound.receive().then());
tcpServer.warmup() //<1>
.block();
DisposableServer server = tcpServer.bindNow();
server.onDispose()
.block();
}
}
<1> 이벤트 순환 그룹 초기화 및 불러오기,native 전송 라이브러리 및 보안에 사용되는native 라이브러리
3.3.데이터를 작성하다
연결된 클라이언트로 데이터를 보내려면 입출력 프로세서를 추가해야 합니다.이 I/O 프로세서는 NettyOutbound을 통해 데이터를 작성할 수 있습니다.다음은 입출력 프로세서를 추가하는 예입니다.
https://github.com/reactor/re... import reactor.core.publisher.Mono;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.handle((inbound, outbound) -> outbound.sendString(Mono.just("hello"))) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 연결된 클라이언트에 hello
문자열 보내기
3.4.소비 데이터
연결된 클라이언트로부터 데이터를 받으려면 입출력 프로세서를 추가해야 합니다.이 I/O 프로세서는 NettyInbound을 통해 데이터를 읽을 수 있습니다.예는 다음과 같습니다.
https://github.com/reactor/re... import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.handle((inbound, outbound) -> inbound.receive().then()) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 연결된 클라이언트로부터 데이터 수신
3.5.라이프 사이클 콜백
다음 라이프 사이클 콜백 매개 변수는 TcpServer
을 확장하는 데 사용할 수 있습니다.
Callback
Description doOnBind
서버 채널이 귀속될 때 호출됩니다.doOnBound
서버 채널이 연결되었을 때 호출합니다.doOnChannelInit
채널이 초기화될 때 호출됩니다.doOnConnection
원격 클라이언트가 연결될 때 호출됩니다.doOnUnbound
서버 채널이 묶일 때 호출됩니다.
다음은 doOnConnection
및 doOnChannelInit
콜백을 사용한 예입니다.
https://github.com/reactor/re... import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.timeout.ReadTimeoutHandler;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
import java.util.concurrent.TimeUnit;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.doOnConnection(conn ->
conn.addHandler(new ReadTimeoutHandler(10, TimeUnit.SECONDS))) //<1>
.doOnChannelInit((observer, channel, remoteAddress) ->
channel.pipeline()
.addFirst(new LoggingHandler("reactor.netty.examples")))//<2>
.bindNow();
server.onDispose()
.block();
}
}
<1> 원격 클라이언트가 연결될 때 ReadTimeoutHandler
에서 Netty
pipeline을 추가합니다.
<2> 채널을 초기화할 때 LoggingHandler
에서 Netty
pipeline을 추가했습니다.
3.6.TCP 레이어 구성
이 단원에서는 세 가지 TCP 레이어 구성 방법을 설명합니다.
import reactor.core.publisher.Mono;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.handle((inbound, outbound) -> outbound.sendString(Mono.just("hello"))) //<1>
.bindNow();
server.onDispose()
.block();
}
}
연결된 클라이언트로부터 데이터를 받으려면 입출력 프로세서를 추가해야 합니다.이 I/O 프로세서는 NettyInbound을 통해 데이터를 읽을 수 있습니다.예는 다음과 같습니다.
https://github.com/reactor/re...
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.handle((inbound, outbound) -> inbound.receive().then()) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 연결된 클라이언트로부터 데이터 수신
3.5.라이프 사이클 콜백
다음 라이프 사이클 콜백 매개 변수는 TcpServer
을 확장하는 데 사용할 수 있습니다.
Callback
Description doOnBind
서버 채널이 귀속될 때 호출됩니다.doOnBound
서버 채널이 연결되었을 때 호출합니다.doOnChannelInit
채널이 초기화될 때 호출됩니다.doOnConnection
원격 클라이언트가 연결될 때 호출됩니다.doOnUnbound
서버 채널이 묶일 때 호출됩니다.
다음은 doOnConnection
및 doOnChannelInit
콜백을 사용한 예입니다.
https://github.com/reactor/re... import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.timeout.ReadTimeoutHandler;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
import java.util.concurrent.TimeUnit;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.doOnConnection(conn ->
conn.addHandler(new ReadTimeoutHandler(10, TimeUnit.SECONDS))) //<1>
.doOnChannelInit((observer, channel, remoteAddress) ->
channel.pipeline()
.addFirst(new LoggingHandler("reactor.netty.examples")))//<2>
.bindNow();
server.onDispose()
.block();
}
}
<1> 원격 클라이언트가 연결될 때 ReadTimeoutHandler
에서 Netty
pipeline을 추가합니다.
<2> 채널을 초기화할 때 LoggingHandler
에서 Netty
pipeline을 추가했습니다.
3.6.TCP 레이어 구성
이 단원에서는 세 가지 TCP 레이어 구성 방법을 설명합니다.
import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.timeout.ReadTimeoutHandler;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
import java.util.concurrent.TimeUnit;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.doOnConnection(conn ->
conn.addHandler(new ReadTimeoutHandler(10, TimeUnit.SECONDS))) //<1>
.doOnChannelInit((observer, channel, remoteAddress) ->
channel.pipeline()
.addFirst(new LoggingHandler("reactor.netty.examples")))//<2>
.bindNow();
server.onDispose()
.block();
}
}
이 단원에서는 세 가지 TCP 레이어 구성 방법을 설명합니다.
3.6.1.Channel Options 설정
기본적으로
TCP
서버는 다음 옵션을 구성합니다../../../reactor-netty-core/src/main/java/reactor/netty/tcp/TcpServerBind.java
TcpServerBind() {
Map, Boolean> childOptions = new HashMap<>(2);
childOptions.put(ChannelOption.AUTO_READ, false);
childOptions.put(ChannelOption.TCP_NODELAY, true);
this.config = new TcpServerConfig(
Collections.singletonMap(ChannelOption.SO_REUSEADDR, true),
childOptions,
() -> new InetSocketAddress(DEFAULT_PORT));
}
새 옵션을 추가하거나 기존 옵션을 수정하려면 다음과 같이 하십시오.
https://github.com/reactor/re...
import io.netty.channel.ChannelOption;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000)
.bindNow();
server.onDispose()
.block();
}
}
다음 링크를 통해
Netty
channel options에 대한 추가 정보를 찾을 수 있습니다.3.6.2.Wire Logger 사용
Reactor Netty는 점 대 점의 데이터를 검사하는 데 사용되는 회선 기록 (wire logging) 을 제공합니다.기본적으로 회선 기록은 닫힙니다.이를 켜려면 로그
reactor.netty.tcp.TcpServer
을 DEBUG
레벨로 설정하고 다음과 같이 구성해야 합니다.https://github.com/reactor/re...
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.wiretap(true) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 오픈 회선 기록
기본적으로 회선은 출력 내용을 기록할 때 AdvancedByteBufFormat#HEX_DUMP을 사용합니다.또한
TcpServer
을 AdvancedByteBufFormat#SIMPLE 또는 AdvancedByteBufFormat#TEXTUAL으로 구성할 수 있습니다.https://github.com/reactor/re...
import io.netty.handler.logging.LogLevel;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
import reactor.netty.transport.logging.AdvancedByteBufFormat;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.wiretap("logger-name", LogLevel.DEBUG, AdvancedByteBufFormat.TEXTUAL) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 선로를 열고 AdvancedByteBufFormat#TEXTUAL을 사용하여 내용을 출력합니다.
3.6.3.Event Loop Group 사용
기본적으로
TCP
서버는 Event Loop Group을 사용합니다. 작업 스레드 수는 초기화할 때 사용할 수 있는 프로세서 수와 같습니다(단, 최소 4).또한 LoopResource #create
중 하나를 사용하여 구성을 수정할 수 있습니다.기본
Event Loop Group
구성은 다음과 같습니다../../../reactor-netty-core/src/main/java/reactor/netty/ReactorNetty.java
/**
* Default worker thread count, fallback to available processor
* (but with a minimum value of 4)
*/
public static final String IO_WORKER_COUNT = "reactor.netty.ioWorkerCount";
/**
* Default selector thread count, fallback to -1 (no selector thread)
*/
public static final String IO_SELECT_COUNT = "reactor.netty.ioSelectCount";
/**
* Default worker thread count for UDP, fallback to available processor
* (but with a minimum value of 4)
*/
public static final String UDP_IO_THREAD_COUNT = "reactor.netty.udp.ioThreadCount";
/**
* Default quiet period that guarantees that the disposal of the underlying LoopResources
* will not happen, fallback to 2 seconds.
*/
public static final String SHUTDOWN_QUIET_PERIOD = "reactor.netty.ioShutdownQuietPeriod";
/**
* Default maximum amount of time to wait until the disposal of the underlying LoopResources
* regardless if a task was submitted during the quiet period, fallback to 15 seconds.
*/
public static final String SHUTDOWN_TIMEOUT = "reactor.netty.ioShutdownTimeout";
/**
* Default value whether the native transport (epoll, kqueue) will be preferred,
* fallback it will be preferred when available
*/
public static final String NATIVE = "reactor.netty.native";
이러한 설정을 수정해야 하는 경우 다음과 같이 구성할 수도 있습니다.
https://github.com/reactor/re...
import reactor.netty.DisposableServer;
import reactor.netty.resources.LoopResources;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
LoopResources loop = LoopResources.create("event-loop", 1, 4, true);
DisposableServer server =
TcpServer.create()
.runOn(loop)
.bindNow();
server.onDispose()
.block();
}
}
3.7.SSL 및 TLS
SSL 또는 TLS를 사용해야 할 경우 아래 열거된 방법으로 구성할 수 있습니다.기본적으로 OpenSSL
을 사용할 수 있으면 SslProvider.OPENSSL을 사용합니다.그렇지 않으면 SslProvider.JDK을 사용합니다.SslContextBuilder 또는 -Dio.netty.handler.ssl.noOpenSsl=true
을 설정하여 전환할 수 있습니다.
다음은 SslContextBuilder
을 사용한 예입니다.
https://github.com/reactor/re... import io.netty.handler.ssl.SslContextBuilder;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
import java.io.File;
public class Application {
public static void main(String[] args) {
File cert = new File("certificate.crt");
File key = new File("private.key");
SslContextBuilder sslContextBuilder = SslContextBuilder.forServer(cert, key);
DisposableServer server =
TcpServer.create()
.secure(spec -> spec.sslContext(sslContextBuilder))
.bindNow();
server.onDispose()
.block();
}
}
3.7.1.서버 이름 식별
TCP
서버의 여러 SslContext
을 특정 도메인에 매핑하도록 구성할 수 있습니다.SNI
매핑을 구성할 때 정확한 도메인 이름 또는 와일드카드를 포함하는 도메인 이름을 사용할 수 있습니다.
다음은 와일드카드가 포함된 도메인 이름을 사용하는 예입니다.
https://github.com/reactor/re... import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
import java.io.File;
public class Application {
public static void main(String[] args) throws Exception {
File defaultCert = new File("default_certificate.crt");
File defaultKey = new File("default_private.key");
File testDomainCert = new File("default_certificate.crt");
File testDomainKey = new File("default_private.key");
SslContext defaultSslContext = SslContextBuilder.forServer(defaultCert, defaultKey).build();
SslContext testDomainSslContext = SslContextBuilder.forServer(testDomainCert, testDomainKey).build();
DisposableServer server =
TcpServer.create()
.secure(spec -> spec.sslContext(defaultSslContext)
.addSniMapping("*.test.com",
testDomainSpec -> testDomainSpec.sslContext(testDomainSslContext)))
.bindNow();
server.onDispose()
.block();
}
}
3.8.도량
TCP 서버는 Micrometer과의 내장형 통합을 지원합니다.그것은 모든 접두사가 reactor.netty.tcp.server
인 도량을 폭로했다.
다음 표에서는 TCP 서버 메트릭에 대한 정보를 제공합니다.
메트릭 이름
유형
묘사
reactor.netty.tcp.server.data.received
DistributionSummary
받은 데이터의 양, 바이트 단위
reactor.netty.tcp.server.data.sent
DistributionSummary
바이트 단위로 전송되는 데이터 양
reactor.netty.tcp.server.errors
Counter
발생한 오류 수
reactor.netty.tcp.server.tls.handshake.time
Timer
TLS 악수에 걸리는 시간
다음 추가 메트릭도 사용할 수 있습니다.ByteBufAllocator
도량
메트릭 이름
유형
묘사
reactor.netty.bytebuf.allocator.used.heap.memory
Gauge
메모리를 쌓는 바이트 수
reactor.netty.bytebuf.allocator.used.direct.memory
Gauge
외장 메모리의 바이트 수
reactor.netty.bytebuf.allocator.used.heap.arenas
Gauge
메모리 쌓기 개수(PooledByteBufAllocator
사용시)
reactor.netty.bytebuf.allocator.used.direct.arenas
Gauge
더미 메모리 개수(PooledByteBufAllocator
사용시)
reactor.netty.bytebuf.allocator.used.threadlocal.caches
Gauge
threadlocal의 캐시 수량 (PooledByteBufAllocator
사용 시)
reactor.netty.bytebuf.allocator.used.tiny.cache.size
Gauge
마이크로 캐시 크기 (PooledByteBufAllocator
사용 시)
reactor.netty.bytebuf.allocator.used.small.cache.size
Gauge
캐시 크기(PooledByteBufAllocator
사용 시)
reactor.netty.bytebuf.allocator.used.normal.cache.size
Gauge
일반 캐시 크기(PooledByteBufAllocator
사용 시)
reactor.netty.bytebuf.allocator.used.chunk.size
Gauge
한 영역의 블록 크기(PooledByteBufAllocator
사용 시)
다음은 통합된 메트릭을 켜는 예입니다.
https://github.com/reactor/re... import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.metrics(true) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 내장형 Micrometer 켜기
TCP 서버 메트릭을 Micrometer
을 제외한 시스템과 통합시키거나 Micrometer
과의 통합을 제공하여 메트릭 레코더를 추가하려면 다음과 같이 하십시오.
https://github.com/reactor/re... import reactor.netty.DisposableServer;
import reactor.netty.channel.ChannelMetricsRecorder;
import reactor.netty.tcp.TcpServer;
import java.net.SocketAddress;
import java.time.Duration;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.metrics(true, CustomChannelMetricsRecorder::new) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> TCP 서버 도량을 열고 ChannelMetricsRecorder의 실현을 제공합니다.
3.9.Unix 도메인 소켓
로컬 전송을 사용하는 경우 TCP
서버는 Unix 도메인 소켓(UDS)을 지원합니다.
다음은 UDS를 사용하는 예입니다.
https://github.com/reactor/re... import io.netty.channel.unix.DomainSocketAddress;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.bindAddress(() -> new DomainSocketAddress("/tmp/test.sock")) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 사용할 DomainSocketAddress
지정
Suggest Edit to "TCP Server "
Reactor Netty 참조 안내서 카탈로그
저작권 성명: 전재하려면 본문 링크를 가지고 출처와 본 성명을 밝히십시오.그렇지 않으면 법적 책임을 추궁할 것이다.https://www.immuthex.com/posts/reactor-netty-reference-guide/tcp-server
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
import io.netty.handler.ssl.SslContextBuilder;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
import java.io.File;
public class Application {
public static void main(String[] args) {
File cert = new File("certificate.crt");
File key = new File("private.key");
SslContextBuilder sslContextBuilder = SslContextBuilder.forServer(cert, key);
DisposableServer server =
TcpServer.create()
.secure(spec -> spec.sslContext(sslContextBuilder))
.bindNow();
server.onDispose()
.block();
}
}
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
import java.io.File;
public class Application {
public static void main(String[] args) throws Exception {
File defaultCert = new File("default_certificate.crt");
File defaultKey = new File("default_private.key");
File testDomainCert = new File("default_certificate.crt");
File testDomainKey = new File("default_private.key");
SslContext defaultSslContext = SslContextBuilder.forServer(defaultCert, defaultKey).build();
SslContext testDomainSslContext = SslContextBuilder.forServer(testDomainCert, testDomainKey).build();
DisposableServer server =
TcpServer.create()
.secure(spec -> spec.sslContext(defaultSslContext)
.addSniMapping("*.test.com",
testDomainSpec -> testDomainSpec.sslContext(testDomainSslContext)))
.bindNow();
server.onDispose()
.block();
}
}
TCP 서버는 Micrometer과의 내장형 통합을 지원합니다.그것은 모든 접두사가
reactor.netty.tcp.server
인 도량을 폭로했다.다음 표에서는 TCP 서버 메트릭에 대한 정보를 제공합니다.
메트릭 이름
유형
묘사
reactor.netty.tcp.server.data.received
DistributionSummary
받은 데이터의 양, 바이트 단위
reactor.netty.tcp.server.data.sent
DistributionSummary
바이트 단위로 전송되는 데이터 양
reactor.netty.tcp.server.errors
Counter
발생한 오류 수
reactor.netty.tcp.server.tls.handshake.time
Timer
TLS 악수에 걸리는 시간
다음 추가 메트릭도 사용할 수 있습니다.
ByteBufAllocator
도량메트릭 이름
유형
묘사
reactor.netty.bytebuf.allocator.used.heap.memory
Gauge
메모리를 쌓는 바이트 수
reactor.netty.bytebuf.allocator.used.direct.memory
Gauge
외장 메모리의 바이트 수
reactor.netty.bytebuf.allocator.used.heap.arenas
Gauge
메모리 쌓기 개수(
PooledByteBufAllocator
사용시)reactor.netty.bytebuf.allocator.used.direct.arenas
Gauge
더미 메모리 개수(
PooledByteBufAllocator
사용시)reactor.netty.bytebuf.allocator.used.threadlocal.caches
Gauge
threadlocal의 캐시 수량 (
PooledByteBufAllocator
사용 시)reactor.netty.bytebuf.allocator.used.tiny.cache.size
Gauge
마이크로 캐시 크기 (
PooledByteBufAllocator
사용 시)reactor.netty.bytebuf.allocator.used.small.cache.size
Gauge
캐시 크기(
PooledByteBufAllocator
사용 시)reactor.netty.bytebuf.allocator.used.normal.cache.size
Gauge
일반 캐시 크기(
PooledByteBufAllocator
사용 시)reactor.netty.bytebuf.allocator.used.chunk.size
Gauge
한 영역의 블록 크기(
PooledByteBufAllocator
사용 시)다음은 통합된 메트릭을 켜는 예입니다.
https://github.com/reactor/re...
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.metrics(true) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 내장형 Micrometer 켜기
TCP 서버 메트릭을
Micrometer
을 제외한 시스템과 통합시키거나 Micrometer
과의 통합을 제공하여 메트릭 레코더를 추가하려면 다음과 같이 하십시오.https://github.com/reactor/re...
import reactor.netty.DisposableServer;
import reactor.netty.channel.ChannelMetricsRecorder;
import reactor.netty.tcp.TcpServer;
import java.net.SocketAddress;
import java.time.Duration;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.metrics(true, CustomChannelMetricsRecorder::new) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> TCP 서버 도량을 열고 ChannelMetricsRecorder의 실현을 제공합니다.
3.9.Unix 도메인 소켓
로컬 전송을 사용하는 경우 TCP
서버는 Unix 도메인 소켓(UDS)을 지원합니다.
다음은 UDS를 사용하는 예입니다.
https://github.com/reactor/re... import io.netty.channel.unix.DomainSocketAddress;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.bindAddress(() -> new DomainSocketAddress("/tmp/test.sock")) //<1>
.bindNow();
server.onDispose()
.block();
}
}
<1> 사용할 DomainSocketAddress
지정
Suggest Edit to "TCP Server "
Reactor Netty 참조 안내서 카탈로그
저작권 성명: 전재하려면 본문 링크를 가지고 출처와 본 성명을 밝히십시오.그렇지 않으면 법적 책임을 추궁할 것이다.https://www.immuthex.com/posts/reactor-netty-reference-guide/tcp-server
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSON
JSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다.
그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다.
저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
import io.netty.channel.unix.DomainSocketAddress;
import reactor.netty.DisposableServer;
import reactor.netty.tcp.TcpServer;
public class Application {
public static void main(String[] args) {
DisposableServer server =
TcpServer.create()
.bindAddress(() -> new DomainSocketAddress("/tmp/test.sock")) //<1>
.bindNow();
server.onDispose()
.block();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.