Node.js 无法连接到应用程序客户端的WAMP路由器

Node.js 无法连接到应用程序客户端的WAMP路由器,node.js,express,websocket,autobahn,wamp-protocol,Node.js,Express,Websocket,Autobahn,Wamp Protocol,我正在构建一个物联网设备的web界面,该界面将更改设备的设置。我使用的技术堆栈如下所示: -前端客户端的React.JS -服务器的Node.js -AutobahnJS库与WAMP通信以进行RPC调用、订阅/发布事件 在我的客户端,我正试图用以下代码连接到我的WAMP路由器w/autobahn //Define our WAMP connection via autobahn var url = 'ws://{ip}:{port}/'; var realm = 'com.example.emb

我正在构建一个物联网设备的web界面,该界面将更改设备的设置。我使用的技术堆栈如下所示: -前端客户端的React.JS -服务器的Node.js -AutobahnJS库与WAMP通信以进行RPC调用、订阅/发布事件

在我的客户端,我正试图用以下代码连接到我的WAMP路由器w/autobahn

//Define our WAMP connection via autobahn
var url = 'ws://{ip}:{port}/';
var realm = 'com.example.embedded.api';
var connection = new autobahn.Connection({url: url, realm: realm});
console.log(connection);

connection.onopen = function (session) {
  console.log("connected to WAMP router");
  app.session = session;
  console.log("connection to app success");
};

connection.onclose = function (reason, details) {
  console.log("WAMP connection closed", reason, details);
  app.session = null;
}

connection.open();
此连接失败。当我在控制台中注销该问题时,错误消息为

websocket.js:167混合内容:“https://{ipaddress}”处的页面通过https加载,但尝试连接到不安全的websocket端点“ws://{ip}:{port}/”。此请求已被阻止;此端点必须在WSS上可用

我不确定为什么我的错误消息会告诉我端点通过WSS。我能够连接到代码服务器上的端点

//point to react build
app.use(express.static(path.join(__dirname, './client/build')));

//create a server
const server = https.createServer({
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.cert')
}, app)
.listen(port, function () {
  console.log(`Example app listening on port ${port}! Go to https://localhost`)
});

//open up a websocket
const wss = new WebSocket.Server({ server });
console.log("wss", wss);

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });
  ws.send('something');
});

server.listen(port, () => console.log(`Listening on port ${port}`));
我不确定为什么我的错误消息会告诉我端点通过WSS。我能够连接到代码服务器上的端点

//point to react build
app.use(express.static(path.join(__dirname, './client/build')));

//create a server
const server = https.createServer({
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.cert')
}, app)
.listen(port, function () {
  console.log(`Example app listening on port ${port}! Go to https://localhost`)
});

//open up a websocket
const wss = new WebSocket.Server({ server });
console.log("wss", wss);

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });
  ws.send('something');
});

server.listen(port, () => console.log(`Listening on port ${port}`));
您收到的错误消息告诉您该网页是通过https加载的。这意味着页面连接或加载的任何其他资源也需要安全。但是,您的webSocket连接代码不安全。它使用的是不安全的ws://xxx。此代码:

//Define our WAMP connection via autobahn
var url = 'ws://{ip}:{port}/';
var realm = 'com.example.embedded.api';
var connection = new autobahn.Connection({url: url, realm: realm});
正在使用不安全的ws://url。如果主网页是通过https加载的,那么浏览器强制要求页面使用的其他资源也必须通过安全链接加载

要解决此问题,可能的选择有:

使用wss://xxx 连接牢固。 不建议更改页面,使其通过http不安全地加载。 更改连接到资源的方式,以便通过到服务器的安全链接代理到资源的连接。
不清楚你要我们帮你解决什么问题。您遇到的错误似乎完全是不言自明的,除了通过wss连接webSocket或将页面降级到http之外,没有其他方法可以解决这个问题。是的,您可以让您的服务器作为设备的代理工作,然后您的服务器可以通过ws连接到它。你说你不能让它工作,但你没有表现出你的任何努力,所以我们没有什么可以帮助你。鉴于您的问题,我不确定我们是否可以帮助您。我不确定如何通过wss正确建立端点。我的印象是,我在客户端编写的代码打开了一个WS连接,以便我进行调用。我只是使用Node来托管静态页面。如果您试图询问的是如何从客户端页面到Express服务器建立wss连接,请编辑问题以明确询问,并显示您尝试的代码和遇到的问题。如果您试图询问的是如何建立从Express server到IoT设备的ws连接,请编辑问题以明确询问,并显示您尝试的代码和遇到的问题。现在你有一个不清楚的问题,有反对票和接近票。你需要修正这个问题。为了清楚起见,这个地方的运作方式,你当然可以在你的评论中帮助人们理解,但你的评论不能是人们理解你真正的问题的唯一方式-你必须编辑问题本身以使其清晰。好的,谢谢你的坦率。