. 우리는 이제 막 시작하고 있습니다. 또한 우리는
HTTP와 긴 폴링
HTTP 스트리밍을 사용해야하는 디자인을 가지고 있습니다. 연결이 열린 5k - 50k 연결된 사용자를 예상하고 있습니다. 우리는 바람둥이가 다루지 않을 것이라는 것을 알고 있습니다. 그래서 우리는 그 일을 성취하기 위해 그물을 살펴 봅니다.netty를 사용하는 서버 푸시 설계 netty에 대한 두 번째 질문에서
디자인은 간단해야하지만 우리는 웹 소켓을 사용할 수 없습니다 (우리는 websocket/stomp 지원으로 netty 위에 hornetQ를 사용하고 싶습니다). 그러나 우리는 할 수 없습니다.
기본적으로 연결된 클라이언트에서 서버 푸시 이벤트 (JS SSE를 사용하는 경우도 있음)가 있습니다.
클라이언트는
그래서 우리는 이벤트를 생성하는 서버 측 프로세스를해야합니다 (그러나, JMS의 큐와 같은 훨씬 더 간단) URL을 기반으로 엔드 포인트에 가입하고 (우리가 관심있는 채널을 통지한다 이것에 간단한 관찰자 패턴을 사용하고있다).
그래서 채널은 해당 프로세스에 가입 한 다음 이벤트를 수신합니다.
오늘의 나의 질문은 우리가 사용한 디자인 접근 방식이 netty 아키텍처를 고려한 올바른 방법인지 확인하는 것입니다.
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
service.subscribe(this);
this.context = ctx;
ctx.sendUpstream(e);
}
//this method gets called by the service when a server event happens
public void onUpdate(String message) {
ChannelBuffer buffer = Channels.buffer(message.getBytes().length());
buffer.writeBytes(message.getBytes());
ChannelFuture future = Channels.future(this.context.getChannel());
future.addListener(ChannelFutureListener.CLOSE);
Channels.write(this.context,future,buffer);
}
감사
통찰력을 가져 주셔서 감사합니다. 코드가 매우 단순합니다. 더 청소를 추가해야합니다 :). 죄송합니다. 내 실수입니다. 실제로 HTTP 폴링을 오래 사용하지 않는 것으로 생각합니다. 클라이언트에서 연결을 열어 읽고 계속 읽습니다. 프로젝트에 대한 좋은 통찰력을 얻을 수 있는지 프로젝트를 점검 할 것입니다. –