rxjs/webSocket - 与“ws://localhost:3000/”的 WebSocket 连接失败:在收到握手响应之前连接已关闭

Ron*_*ofe 5 websocket node.js rxjs angular

我已经在我的后端初始化了 WebSocket。
然后使用rxjs/webSocket连接,在浏览器上收到如下错误:

connection to 'ws://localhost:3000/' failed: Connection closed before receiving a handshake response
Run Code Online (Sandbox Code Playgroud)

server.js 相关代码:

connection to 'ws://localhost:3000/' failed: Connection closed before receiving a handshake response
Run Code Online (Sandbox Code Playgroud)

app.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);
Run Code Online (Sandbox Code Playgroud)

网络套接字服务

const app = express();

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

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

module.exports = { app, onServerInitialized };
Run Code Online (Sandbox Code Playgroud)

app.component.ts

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 });
    }
}
Run Code Online (Sandbox Code Playgroud)

Dam*_*ewa 8

您正在使用socket.io包,并且此包已在/socket.io路径中设置了服务器。所以试试这个uri:ws://localhost:3000/socket.io/?EIO=3&transport=websocket

还要确保在onServerInitialized函数中你不需要在底部添加这一行

io.listen(+process.env.PORT);
Run Code Online (Sandbox Code Playgroud)

编辑:

更好的使用ngx-socket-io打包成 Angular 项目

  • 然后尝试这个uri:`ws://localhost:3000/socket.io/?EIO=3&amp;transport=websocket`,但恐怕你必须使用`ngx-socket-io`包 (2认同)