我正在构建IoT设备的Web界面,这将更改设备的设置。我正在使用的技术堆栈如下: -面向前端客户端的React.JS -服务器的Node.js -AutobahnJS库与WAMP进行通信以进行RPC调用,订阅/发布事件。
在客户端,我正在尝试使用以下代码连接到具有自动高速公路的WAMP路由器
//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}`));
答案 0 :(得分:0)
我不确定为什么我的错误消息告诉我该端点通过WSS。我可以连接到代码服务器上的该端点。
您收到的错误消息告诉您该网页是通过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://
网址。如果主页是通过https加载的,则浏览器会强制要求该页面使用的其他资源也必须通过安全链接加载。
要解决此问题,可能的选择是:
wss://xxx
进行安全连接。http
上(不推荐)。