如何在 nodejs 中通过 TCP/IP 获取传感器数据? [英] How to get sensor data over TCP/IP in nodejs?
问题描述
我有一个带有 socket.io 的 nodejs 应用程序.要对此进行测试,请将以下清单另存为 app.js.安装 node,然后 npm install socket.io 最后在命令提示符下运行: node app.js
I have a nodejs app with socket.io. To test this, save the below listing as app.js. Install node, then npm install socket.io and finally run on command prompt: node app.js
var http = require('http'),
fs = require('fs'),
// NEVER use a Sync function except at start-up!
index = fs.readFileSync(__dirname + '/index.html');
// Send index.html to all requests
var app = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(index);
});
// Socket.io server listens to our app
var io = require('socket.io').listen(app);
// Send current time to all connected clients
function sendTime() {
io.sockets.emit('time', { time: new Date().toJSON() });
}
// Send current time every 10 secs
setInterval(sendTime, 5000);
// Emit welcome message on connection
io.sockets.on('connection', function(socket) {
socket.emit('welcome', { message: 'Welcome!' });
socket.on('i am client', console.log);
});
app.listen(3000);
此代码将数据发送到文件 index.html.运行 app.js 后,在浏览器中打开此文件.
This code sends data to the file index.html. After running the app.js, open this file in your browser.
<!doctype html>
<html>
<head>
<script src='http://code.jquery.com/jquery-1.7.2.min.js'></script>
<script src='http://localhost:3000/socket.io/socket.io.js'></script>
<script>
var socket = io.connect('//localhost:3000');
socket.on('welcome', function(data) {
$('#messages').html(data.message);
socket.emit('i am client', {data: 'foo!'});
});
socket.on('time', function(data) {
console.log(data);
$('#messages').html(data.time);
});
socket.on('error', function() { console.error(arguments) });
socket.on('message', function() { console.log(arguments) });
</script>
</head>
<body>
<p id='messages'></p>
</body>
</html>
现在发送的数据是当前时间,index.html 工作正常,每五秒更新一次时间.
The data sent right now is the current time and index.html works fine, updates the time every five seconds.
我想修改代码,以便它通过 TCP 读取我的传感器数据.我的传感器通过数据采集系统连接,并通过 IP:172.16.103.32 端口:7700 中继传感器数据.(这是通过 LAN 进行的,因此您无法访问.)
I want to modify the code so that, it reads my sensor data over TCP. My sensors are connected thru a data acquisition system and relays the sensor data over IP: 172.16.103.32 port:7700. (This is over LAN, so will not the accessible to you.)
如何在 nodejs 中实现?
SensorMonkey 是可行的替代方案吗?如果是这样,有关如何使用它的任何指示?
Is SensorMonkey a viable alternative ? If so, any pointers on how to go about using it?
推荐答案
我有一个不错的 hack 现在正在运行,我请求读者对此发表评论......
I have a decent hack that is working right now, for which I request the readers to comment on....
var net = require('net'),
http = require('http'),
port = 7700, // Datalogger port
host = '172.16.103.32', // Datalogger IP address
fs = require('fs'),
// NEVER use a Sync function except at start-up!
index = fs.readFileSync(__dirname + '/index.html');
// Send index.html to all requests
var app = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(index);
});
// Socket.io server listens to our app
var io = require('socket.io').listen(app);
// Emit welcome message on connection
io.sockets.on('connection', function(socket) {
socket.emit('welcome', { message: 'Welcome!' });
socket.on('i am client', console.log);
});
//Create a TCP socket to read data from datalogger
var socket = net.createConnection(port, host);
socket.on('error', function(error) {
console.log("Error Connecting");
});
socket.on('connect', function(connect) {
console.log('connection established');
socket.setEncoding('ascii');
});
socket.on('data', function(data) {
console.log('DATA ' + socket.remoteAddress + ': ' + data);
io.sockets.emit('livedata', { livedata: data }); //This is where data is being sent to html file
});
socket.on('end', function() {
console.log('socket closing...');
});
app.listen(3000);
<小时>
参考文献:
References:
- Socket.io 网站 - www.socket.io - 现在是流行词.
- TCP 套接字编程
- Nodejs网络"模块
- 最简单的 socket.io 示例.
这篇关于如何在 nodejs 中通过 TCP/IP 获取传感器数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!