RxJs webSocket 无法连接到使用 socket.io 实现的 websocket 服务器
RxJs webSocket not able to connect to a websocket server implemented with socket.io
我有一个简单的 websocket 服务器按照 this example
构建
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
我确信我犯了一个非常基本的错误,但我目前不知道哪里有错误。
使用纯网络套接字连接到 socket.io 服务器几乎是不可能的。 Socket.io 在与纯 Web 套接字不兼容的 Websocket 标准之上添加了很多内容。如果你想跳过在客户端使用 socket.io 我会建议使用其他一些库服务器端,一个例子是 ws
我有一个简单的 websocket 服务器按照 this example
构建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
我确信我犯了一个非常基本的错误,但我目前不知道哪里有错误。
使用纯网络套接字连接到 socket.io 服务器几乎是不可能的。 Socket.io 在与纯 Web 套接字不兼容的 Websocket 标准之上添加了很多内容。如果你想跳过在客户端使用 socket.io 我会建议使用其他一些库服务器端,一个例子是 ws