Node.js can';无法从websocket rxjs节点获取响应
尝试使用rxjs WebSocket使WebSocket正常工作 我设置了一个节点服务器,目前不会抛出错误,但不会向服务器或连接的用户发送消息 当我使用“ws://echo.websocket.org/”时,它似乎工作得更好,我看到消息回显给我,但是,在其他开放浏览器中,我看不到发送的消息,用户之间基本上没有通信,应该订阅websocket 我想要的只是一种在用户之间传递简单信息的简单方式 index.jsNode.js can';无法从websocket rxjs节点获取响应,node.js,angular,websocket,Node.js,Angular,Websocket,尝试使用rxjs WebSocket使WebSocket正常工作 我设置了一个节点服务器,目前不会抛出错误,但不会向服务器或连接的用户发送消息 当我使用“ws://echo.websocket.org/”时,它似乎工作得更好,我看到消息回显给我,但是,在其他开放浏览器中,我看不到发送的消息,用户之间基本上没有通信,应该订阅websocket 我想要的只是一种在用户之间传递简单信息的简单方式 index.js var express = require('express'); var WebS
var express = require('express');
var WebSocketServer = require('websocket').server;
var app2 = express()//There is already another app var for main app server
var server2 = http.createServer(app2);
var server2 = app2.listen(8081, function () {
console.log((new Date()) + ' Server is listening on port 8081');
})
wsServer = new WebSocketServer({
httpServer: server2,
autoAcceptConnections: false
});
function originIsAllowed(origin) {
if (origin === 'http://localhost:1234'){
return true;
}
// put logic here to detect whether the specified origin is allowed.
}
wsServer.on('request', function(request) {
if (!originIsAllowed(request.origin)) {
// Make sure we only accept requests from an allowed origin
request.reject();
console.log((new Date()) + ' Connection from origin ' + request.origin + ' rejected.');
return;
}
var connection = request.accept(null, request.origin);
console.log((new Date()) + ' Connection accepted.');
connection.on('message', function(message) {
// console.log(message)
if (message.type === 'utf8') {
console.log('Received Message from: ' + connection.remoteAddress);
connection.sendUTF(message.utf8Data);
}
else if (message.type === 'binary') {
console.log('Received Binary Message of ' + message.binaryData.length + ' bytes');
connection.sendBytes(message.binaryData);
}
});
connection.on('close', function(reasonCode, description) {
console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.');
});
});
在我的客户端套接字服务中:
import { Injectable } from '@angular/core';
import { Observable } from '../../../node_modules/rxjs';
@Injectable()
export class SocketService {
socket$ = Observable.webSocket( 'ws://localhost:8081');
// 'ws://echo.websocket.org/'
constructor() {
this.connectToSocket()
}
connectToSocket(){
this.socket$.subscribe(
(message) => console.log('message received: ' + message),
(err) => console.log(err),
() => console.log('complete')
);
}
}
要从另一个组件发送消息,我使用:
this.socketService.socket$.next(JSON.stringify('test'))根据
WebSocket节点
()的文档,在继续握手之前,您必须以编程方式接受每个连接
您可以改为将服务器配置的autoAcceptConnections
选项设置为true
,如下所示:
const wss = new WebSocketServer({ httpServer: server2, autoAcceptConnections: true });
request.accept('chosen-protocol', 'accepted-origin')
如果您确实有自定义请求检查要求,则可以在请求
处理程序中使用接受
或拒绝
,如下所示:
const wss = new WebSocketServer({ httpServer: server2, autoAcceptConnections: true });
request.accept('chosen-protocol', 'accepted-origin')
或
非常感谢,使用你提供的文档,我已经开始工作并更新了我的问题,我现在唯一的问题是如果我打开两个浏览器,消息不会在它们之间传播,我如何在多个窗口中测试这一点?每个浏览器都有自己的连接,所以你必须跟踪它们,例如,将每个连接放在连接上的一个数组中。然后,如果有人发送消息,请在阵列中的每个连接上循环并将消息发送回。WebSocket不是开箱即用的。我明白了,再次感谢你,你让事情变得更清楚了