从我的bluemix空间中的nodered实例通过安全网关访问Tririga OSLC api时出现错误。 Tririga服务器托管在我位于印度浦那的办公室。 Bluemix区域是美国南部。
错误:
Error: socket hang up : cap-sg-prd-3.integration.ibmcloud.com:15343/tririga/oslc/spq/triAllParkingLotsQC?oslc.select=*&oslc.where=spi:cstSensorId=15
SyntaxError: undefined:1 Error: socket hang up : ^ Unexpected token E
使用邮递员访问URL时没有问题。这与两个DC之间的链接速度有关吗? Bluemix网关的速度测试显示上行链路和下行链路的延迟时间为200毫秒。
更多信息: 我做了一个示例应用程序来删除Tririga。在底部,您可以看到在同一Tririga服务器上运行的示例节点应用程序代码。我在网关服务中创建了一个新目标,并尝试使用网关主机和端口为新目标通过NodeRed流访问api。这个api也有同样的问题。
错误:套接字挂断:cap-sg-prd-3.integration.ibmcloud.com:17451/inventory
我看到以下服务器请求的两个控制台日志' / inventory'打印在我的内部部署服务器控制台上。
var express = require('express');
// create a new express server
var app = express();
var inventories= [
{ city : 'Beijing', quantity : 1000},
{ city : 'Shanghai', quantity : 500},
{ city : 'Guangzhou', quantity : 1000},
{ city : 'Shenzhen', quantity : 800}
];
//Get the inventory data
app.get('/inventory', function(req, res) {
console.log("Request received");
res.send({"code":1000, "inventory":inventories});
console.log("Request sent");
});
app.listen(8000, function() {
//print a message when the server starts listening
console.log("server started on 8000");
});
还有一个观察结果是http://cap-sg-prd-3.integration.ibmcloud.com:17451/inventory可以通过浏览器或邮递员访问而没有任何问题。
答案 0 :(得分:1)
谢谢盖伦。我弄明白了原因。通过添加keep-alive标头,我设法解决了这个问题。为了准确起见,我在调用URL之前在Node Red功能中添加了以下内容。
[{“id”:“ef815a6f.f94ed8”,“type”:“function”,“z”:“280728a8.c953b8”,“name”:“Tririga session”,“func”:“\ nvar get_headers = flow.get(\“get_headers \”); \ n \ nif(get_headers === null){\ n var sessionid = msg.headers ['set-cookie']; \ n msg.headers = {\“connection \“:\”Keep-Alive:timeout = 15,max = 100 \“,\”cookie \“:sessionid}; \ n flow.set(\”get_headers \“,msg.headers); \ n \ n} \ n \ nmsg.statusCode = \“\”; \ nmsg._msgid = \“\”; \ n \ nreturn msg;“,”输出“:1,”noerr“:0,”x“:1697.9458847045898,”y “:142.6542739868164,” 线 “:[[” f110f408.7fc428" ]]}]