【问题标题】:RxJs webSocket not able to connect to a websocket server implemented with socket.ioRxJs webSocket 无法连接到使用 socket.io 实现的 websocket 服务器
【发布时间】:2018-10-20 11:07:15
【问题描述】:

我在this example 之后构建了一个简单的 websocket 服务器

import { createServer, Server } from 'http';
import * as express from 'express';
import * as socketIo from 'socket.io';

export class MobileObjectServer {
    public static readonly PORT:number = 8081;
    private app: express.Application;
    private server: Server;
    private io: socketIo.Server;
    private port: string | number;

    constructor() {
        this.createApp();
        this.config();
        this.createServer();
        this.sockets();
        this.listen();
    }

    private createApp() {
        this.app = express();
    }

    private createServer() {
        this.server = createServer(this.app);
    }

    private config() {
        this.port = process.env.PORT || MobileObjectServer.PORT;
    }

    private sockets() {
        this.io = socketIo(this.server);
    }

    private listen() {
        this.server.listen(this.port, () => {
            console.log('Running server on port %s', this.port);
        });

        this.io.on('connect', (socket: any) => {
            console.log('Connected client on port %s.', this.port);
            socket.on('message', m => {
                console.log('[server](message): %s', JSON.stringify(m));
                this.io.emit('message', m);
            });

            socket.on('disconnect', () => {
                console.log('Client disconnected');
            });
        });
    }

    public getApp(): express.Application {
        return this.app;
    }
}

这段代码运行流畅。我可以在我的机器上启动 websocket 服务器,如果我使用 socket.io-client 库,我可以连接。

现在我想使用 RxJs 提供的 webSocket 和 WebSocketSubject 工具从客户端连接到此类服务器,但我在尝试连接时遇到了一些基本问题。

如果我这样做了

import { webSocket } from 'rxjs/observable/dom/webSocket';
webSocket('http://localhost:8081')

什么都没有发生,没有建立连接。

如果我使用'ws://localhost:8081' 作为连接字符串,那么我会收到这样的错误

WebSocketSubject.js:142 WebSocket connection to 'ws://localhost:8081/' failed: Connection closed before receiving a handshake response

我确信我犯了一个非常基本的错误,但我目前不知道在哪里。

【问题讨论】:

    标签: websocket socket.io rxjs rxjs-dom


    【解决方案1】:

    使用纯 Web 套接字连接到 socket.io 服务器或多或少是不可能的。 Socket.io 在 Websocket 标准之上添加了很多与纯 Web 套接字不兼容的内容。如果您想在客户端跳过使用 socket.io,我建议您使用其他库服务器端,例如ws

    【讨论】:

    • 谢谢,我试试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2013-12-04
    • 2020-07-04
    • 2020-03-02
    • 1970-01-01
    • 2013-02-12
    相关资源
    最近更新 更多