Веб-клиент Websocket получает 1006 при подключении к wss

#javascript #node.js #angular #websocket

#javascript #node.js #угловой #websocket

Вопрос:

У меня есть websocket node.js сервер и успешно подключен с ios, Android. Но при подключении с использованием rxjs / WebSocket в веб-приложении angular произошел сбой, и он вернул 1006.

Затем я запускаю сервер websocket локально, подключаю веб-приложение localhost: 4200 angular с сервером-> ws:// localhost: 3000 / ws, все работает нормально. Почему не удается подключиться к wss one.

Сервер:

 const app = express();
const server = createServer(app);
const cors = require('cors');

app.use("/", express.static("public"));
var corsOptions = {
  origin: 'http://localhost:4200',
  credentials: true
};
app.use(cors(corsOptions));

const wsApp = expressWs(app, server).app;
wsApp.ws("/ws", handleSocketConnection);

const port = process.env.PORT || 3000;
server.listen(port, () => {
  console.log(`server started on http://localhost:${port}`);
});  

Клиент:

 public initSocket(clientId): void {
    console.log('init socket');
    this.socket = webSocket(environment.webSocket);

    this.socket.next({ "channel": "login", "name": clientId });

}

public getMessage(): Observable<IWebsocketMessage> {
    return new Observable<IWebsocketMessage>(observer => {
        this.socket.subscribe((data: IWebsocketMessage) => {
            console.log('message received: '   JSON.stringify(data));
            observer.next(data);
        }, error => {
            console.log(error);
        });


    });
    //    return this.socket.asObservable();
}  

Комментарии:

1. Потому что wss это не ws ; в основном wss это WebSocket через HTTPS. Для этого требуется зашифрованное соединение, которое не предусмотрено вашим серверным кодом. Обычно вы запускаете обратный прокси, такой как nginx, перед этим сервером, чтобы добавить шифрование HTTPS.

2. @Thomas спасибо за комментарии. Я попытался развернуть код веб-клиента для prod — https, та же ошибка (поэтому https вызывает wss). В прошлом я мог получить очень четкое сообщение относительно wss Против ws. Например, при подключении к незашифрованному серверу websocket как ios, так и Android выдадут ошибку. Есть какие-либо предложения, которые я могу устранить?

3. оказывается, что балансировщик нагрузки aws имеет время ожидания по умолчанию 60 секунд, которое применяется к его соединениям, соединение было прекращено балансировщиком нагрузки после 60 секунд бездействия. Решение состоит в том, чтобы отправлять по крайней мере 1 байт данных до истечения каждого периода ожидания ожидания.