RxJs webSocket не может подключиться к серверу websocket, реализованному с помощью socket.io - PullRequest
0 голосов
/ 10 мая 2018

У меня есть простой сервер веб-сокетов, построенный по этому примеру

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 .

Теперь я хотел бы подключиться к такому серверу с клиента, используя webSocket и WebSocketSubject средства, предоставляемые RxJ, но я столкнулся с некоторыми основными проблемами, просто пытаясь подключиться.

Если я сделаю

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

Я уверен, что совершаю очень основную ошибку, но в настоящее время я понятия не имею, где.

1 Ответ

0 голосов
/ 14 мая 2018

Более или менее невозможно подключиться к серверу socket.io с чистыми веб-сокетами. Socket.io добавляет много нового к стандарту Websocket, который не совместим с чистыми веб-сокетами. если вы хотите пропустить использование socket.io на стороне клиента, я бы посоветовал использовать какую-то другую сторону библиотечного сервера, например, ws

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...