【发布时间】:2015-02-14 22:50:14
【问题描述】:
我有一个 Raspberry Pi 通过 server.js 文件提供 html 页面。主要行(不是所有代码)是:
var app = require('http').createServer(handler);
var io = require('socket.io').listen(app);
...
app.listen(8000);
...
fucntion handler(req,res) {
fs.readFile(__dirname+'/../index.html' function(err,data) {
...
io.sockets.on('connection', function (socket) {
setInterval(function(){
...
socket.emit('tempUpd',date,temp);
}, 2000);
});
在 index.html 上:
<head>
...
<script src="/socket.io/socket.io.js"></script>
...
</head>
<body>
<div id="info"></div>
---
<script>
var socket = io.connect('http://192.168.1.6:8000');
socket.on('tempUpd', function(date, temp){
document.getElementById("info").textContent = temp;
});
...
</script>
</body>
</html>
如您所见,我们的想法是每 2 秒更新一次温度测量值。
当我通过本地网络(使用无线)从智能手机连接到我的 Raspberry PI 时,一切正常,我可以访问网页并查看每 2 秒变化一次的温度值。
当我关闭智能手机上的无线并通过移动网络连接到树莓派时(已将我的路由器配置为允许连接传递到树莓派),我可以看到网页,但所有信息都通过了套接字永远不会显示。
考虑到由于某种原因我无法在该页面上看到动态元素,我添加了另一个,并添加了一些代码,以便它使用 setInterval 每 2 秒显示一次当前时间。我看到时间在变化,但没有任何通过套接字显示的内容。再次,我切换到本地网络,一切都是可见的,包括通过套接字传递的信息。
对可能发生的事情有任何想法吗? 非常感谢!!
【问题讨论】:
标签: node.js sockets websocket socket.io raspberry-pi