Я играю с веб-сокетом в Angular 7 webapp.Идея состоит в том, чтобы веб-приложение обслуживалось узлом - например, по адресу:
http://localhost:4200/
и веб-сокетом по другому адресу и порту, обслуживаемому приложением Netty / Java.
НаВеб-приложение Я перехожу на страницу веб-сокета.Для ввода адреса веб-сокета есть текстовое поле и кнопка «Подключиться», которая соединяет нас с сервером веб-сокетов.Например, тест по этому адресу работает нормально:
ws://echo.websocket.org // works - we get a response
or
ws://echo.websocket.org:80 // works - we get a response
Вместо этого я хочу, чтобы сервер Netty обслуживал веб-сокет.Запускаю сервер - обслуживает по адресу:
http://localhost:8081/
и работает нормально.(Я могу подключиться из отдельного окна браузера и страницы веб-сокета, обслуживаемой сервером по этому адресу и порту).
Но теперь я хочу подключиться к серверу Netty из моего веб-приложения на - localhost: 4200/.Итак, я предоставляю этот адрес для сокетного соединения;
ws://localhost:8081/
и нажимаю «Подключиться».
Сервер Netty реагирует на этот журнал (все строки отображаются одновременно):
Feb 16, 2019 7:26:20 AM io.netty.handler.logging.LoggingHandler channelRead
INFO: [id: 0xfd77a1f7, L:/0:0:0:0:0:0:0:0:8081] READ: [id: 0x24ad1bc1, L:/127.0.0.1:8081 - R:/127.0.0.1:51928]
Feb 16, 2019 7:26:20 AM io.netty.handler.logging.LoggingHandler channelReadComplete
INFO: [id: 0xfd77a1f7, L:/0:0:0:0:0:0:0:0:8081] READ COMPLETE
Websocke channel Active:[id: 0x24ad1bc1, L:/127.0.0.1:8081 - R:/127.0.0.1:51928]
Websocke channel Inactive:[id: 0x24ad1bc1, L:/127.0.0.1:8081 ! R:/127.0.0.1:51928]
Websocke channel Unregistered:[id: 0x24ad1bc1, L:/127.0.0.1:8081 ! R:/127.0.0.1:51928]
Вероятно, это означает, что связь работает, однако Netty не принимает и отключает веб-сокет.
Это мои обработчики в конвейере Netty:
new HttpServerCodec());
new HttpObjectAggregator(65536));
new WebSocketServerCompressionHandler());
new WebSocketServerProtocolHandler(WEBSOCKET_PATH, null, true));
// Next handler serves index.html page
// ... extends SimpleChannelInboundHandler<FullHttpRequest>
// @Override
// protected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest req) throws Exception {
new WebSocketIndexPageHandlerA1(WEBSOCKET_PATH));
// Next handler handles websocket communication
// ... extends SimpleChannelInboundHandler<WebSocketFrame>
// @Override
// protected void channelRead0(ChannelHandlerContext ctx, WebSocketFrame frame) {
new WebSocketFrameHandlerA1());
Как заставить Netty принять этот запрос веб-сокета и передать поток по конвейеру моему последнему обработчику - обработчику сообщений веб-сокета - WebSocketFrameHandlerA1, чтобы он мог отвечать клиенту (-ам) веб-сокета - откуда бы они ни исходили?