【发布时间】:2014-03-21 23:45:32
【问题描述】:
我的 Spacebrew 设置需要一些帮助。 我有一个在 Arduino Yun 上运行的小应用程序,它将数据从输入设备发送到在同一网络内我的笔记本电脑上运行的 Spacebrew 服务器。然后,我在作为订阅者连接到 Spacebrew 服务器的同一台笔记本电脑上有一个简单的 html+js 网页。出于某种原因,我无法通过网络应用程序“读取”任何传入数据 - 订阅者失败。 我做了很多调试(一整天),但我无法跟踪错误,但我确信它与我的机器(或任何其他依赖模块)上设置的 Spacebrew 有关。
这是我的调试、信息和结论:
运行连接到公共 Spacebrew 服务器的同一个应用程序工作正常 (sandbox.spacebrew.cc),这意味着我的 arduino 代码和 html+js 是 正确。
当同时切换到我的本地 Spacebrew 设置时, 订阅者似乎由于某种原因失败了。
我在本地有一个这样的管理页面 (http://spacebrew.github.io/spacebrew/admin/admin.html?server=sandbox.spacebrew.cc), 我可以在上面看到我的客户和订阅者,我可以同时连接它们 用“线”,所以他们应该互相交谈(见截图 附)。
我的客户 (Arduino Yun) 每秒发送一次数据,“点”在 管理屏幕每秒闪烁一次。
我的订阅者 (html+js) 在“onOpen”命令后停止,但是当 连接到 sandbox.spacebrew.cc 它更进一步到“onRangeMessage” (见附件html+js代码)
使用 -l 参数(调试)在本地运行 Spacebrew 时,我看不到任何 错误,一切似乎都很好(请参阅附加的控制台响应)
要在本地安装 Spacebrew 我用过 npm,我也安装了 像永远监视器和ws这样的依赖项,我遵循了这个步骤 页面:https://github.com/Spacebrew/spacebrew
我的节点版本是v0.10.6
我的系统是 Mac OS X 10.6.8
-
我还在同一台机器上运行 Apache 和少数其他服务器(imap、ldap、mysql、...),但我怀疑这可能是一个问题,因为我在端口 9000 上运行 Spacebrew
附件:
JS 代码:
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="sb-1.2.0.js"></script>
<script type="text/javascript">
var sb = new Spacebrew.Client( '10.5.203.66', 'lokers-photoresistor', 'description', {'port':9000, 'debug':1, 'reconnect':1} );
sb.addSubscribe( 'brightness', 'range' );
sb.onStringMessage = function onString( name, value ) {
console.log('onStringMessage');
console.log(name);
console.log(value);
console.log('-------------------');
};
sb.onRangeMessage = function onRange( name, value ) {
console.log('onRangeMessage');
console.log(name);
console.log(value);
console.log('-------------------');
};
sb.onBooleanMessage = function onBoolean( name, value ) {
console.log('onBooleanMessage');
console.log(name);
console.log(value);
console.log('-------------------');
};
sb.onCustomMessage = function onBoolean( name, value, type ) {
console.log('onCustomMessage');
console.log(name);
console.log(value);
console.log(type);
console.log('-------------------');
};
sb.onOpen = function onOpen() {
console.log('onOpen');
console.log('-------------------');
};
sb.onClose = function onClose() {
console.log('onClose');
console.log('-------------------');
};
sb.connect();
</script>
</head>
<body>
</body>
</html>
Spacebrew 调试:
info: [pingAllClients] setting validated = false
info: [pingAllClients] setting validated = false
info: [pingAllClients] setting validated = false
info: [wss.onmessage] new message received {"message": {"value": "155", "type": "range", "name": "brightness", "clientName": "lokers-photoresistor-check"}}
info: [handleMessageMessage] message sent to: 'lokers-photoresistor' msg: {"message":{"name":"brightness","type":"range","value":"155","clientName":"lokers-photoresistor"}}
info: [handleMessageMessage] message sent to: 'lokers-photoresistor-graph' msg: {"message":{"name":"line1","type":"range","value":"155","clientName":"lokers-photoresistor-graph"}}
info: [receivedMessage] received new message from spacebrew server:
info: {"message":{"value":"155","type":"range","name":"brightness","clientName":"lokers-photoresistor-check","remoteAddress":"10.5.228.249"}}
Spacebrew 管理员截图:
【问题讨论】:
-
经过更多调试后,使用调试“node node_server_forever.js --loglevel debug”运行 spacebrew 时。我看到这条消息:“警告:[pingAllClients] 无法 PING 客户端,连接已经关闭”