rxjs / webSocket - сбой подключения WebSocket к 'ws: // localhost: 3000 /': соединение закрыто до получения ответа на рукопожатие - PullRequest
5 голосов
/ 03 мая 2020

Я инициализировал WebSocket на своем бэкэнде.
Затем используйте rxjs / webSocket для подключения и получения следующей ошибки в браузере:

connection to 'ws://localhost:3000/' failed: Connection closed before receiving a handshake response

server. js связанный код:

const { app, onServerInitialized } = require('./app');

const port = normalizePort(process.env.PORT);
console.log('Server is running on port ' + process.env.PORT);
app.set('port', port);

const server = http.createServer(app);
onServerInitialized(server);

app. js связанный код:

const app = express();

const onServerInitialized = server => {
    const io = socketio(server);

    io.on('connection', socket => {
        console.log('subscrie');
    });
};

module.exports = { app, onServerInitialized };

WebSocketService

import { webSocket, WebSocketSubject } from 'rxjs/webSocket';

export class WebSocketService {
    private ws$: WebSocketSubject<any> = webSocket('ws://localhost:3000');

    public getWSListener() {
        return this.ws$.asObservable().pipe();
    }

    public sendMessage(message: string) {
        this.ws$.next({ message });
    }
}

app.component.ts

constructor(
  private webSocketService: WebSocketService,
) {}

ngOnInit() {
  this.webSocketService.getWSListener().subscribe(() => {
    console.log('event')
  });
}

1 Ответ

6 голосов
/ 05 мая 2020

Вы используете пакет socket.io, и для этого пакета настроен путь сервера /socket.io. Попробуйте следующее: ws://localhost:3000/socket.io/?EIO=3&transport=websocket

Также убедитесь, что в функции onServerInitialized вам не нужно добавлять эту строку внизу

io.listen(+process.env.PORT);

РЕДАКТИРОВАТЬ:

Лучше использовать ngx-socket-io пакет в Angular проект

...