我在IBM Bluemix上部署了一个非常简单的应用程序节点。此节点应用程序将以编程方式在同一台计算机上启动节点RED实例,并在/ red端点上提供节点RED UI。
有一个端点/ startinstance将启动节点RED实例
这是我正在使用的代码:
var RED = require('node-red');
var express = require('express'),
app = express(),
server = require('http').createServer(app);
var port = env.PORT:
var settings = {
httpAdminRoot: '/red',
httpNodeRoot: '/api',
userDir: instance.userDirectory,
functionGlobalContext: { }
};
app.get('/startinstance', function(req, res, next) {
RED.init(server, settings);
// Serve the editor UI from /red
app.use(settings.httpAdminRoot,RED.httpAdmin);
// Serve the http nodes UI from /api
app.use(settings.httpNodeRoot, RED.httpNode);
RED.start();
});
app.get('/stopinstance', function(req, res, next) {
RED.stop();
});
server.listen(port);
我的节点RED UI作为iFrame
嵌入在主应用程序UI中。
这很好,我可以成功启动节点RED实例。当我第一次访问节点RED UI时,它工作正常。但是当我停止实例并重新启动它时,它会在Google Chrome控制台中抛出一个Web套接字错误,如下所示:
WebSocket连接到' ws://myapp.mybluemix.net/red/comms'失败:无效的帧头red.min.js:16
这是Safari控制台中的错误:
WebSocket连接到' ws://myapp.mybluemix.net/red/comms'失败:如果没有协商的deflate-frame扩展
,压缩位必须为0
此设置适用于localhost,我不知道为什么会在Bluemix中抛出错误。