//Sending UDP message to TFTP server
//dgram modeule to create UDP socket
var express= require('express'), fs= require('fs'),path = require('path'),util = require('util'),dgram= require('dgram'),client= dgram.createSocket('udp4'),bodyParser = require('body-parser'),app = express(), ejs = require('ejs');
var plotly = require('plotly')("Patidar2", "9z2dlsvsqn")
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
app.use(express.static('public'));
//Reading in the html file for input page
app.get('/', function(req, res){
var html = fs.readFileSync('index2.html');
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(html);
});
//reading in html file for output page
app.get('/output', function(req, res){
var html = fs.readFileSync('index4.html');
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(html);
});
//Recieving UDP message
app.post('/output', function(req, res){
var once= req.body.submit;
if (once == "Once") {
//Define the host and port values of UDP
var HOST= req.body.ip;
var PORT= req.body.port;
//Reading in the user's command, converting to hex
var message = new Buffer(req.body.number, 'hex');
//Sends packets to TFTP
client.send(message, 0, message.length, PORT, HOST, function (err, bytes) {
if (err) throw err;
});
//Recieving message back and printing it out to webpage
client.on('message', function (message) {
fs.readFile('index3.html', 'utf-8', function(err, content) {
if (err) {
res.end('error occurred');
return;
}
var temp = message.toString(); //here you assign temp variable with needed value
var renderedHtml = ejs.render(content, {temp:temp, host: HOST, port: PORT}); //get redered HTML code
res.end(renderedHtml);
//var data = [{x:[req.body.number], y:[temp], type: 'scatter'}];
//var layout = {fileopt : "overwrite", filename : "simple-node-example"};
/* plotly.plot(data, layout, function (err, msg) {
if (err) return console.log(err);
console.log(msg);
}); */
});
});
}
//Send UDP packet continuously every ten seconds
if (once == "continuous") {
var timesRun = 0;
var requestLoop = setInterval(function(){
timesRun += 1;
if(timesRun === 2){
clearInterval(requestLoop);
}
//Define the host and port values of UDP
var HOST= req.body.ip;
var PORT= req.body.port;
//Reading in the user's command, converting to hex
var message = new Buffer(req.body.number, 'hex');
//Sends packets to TFTP
client.send(message, 0, message.length, PORT, HOST, function (err, bytes) {
if (err) throw err;
});
}, 10000);
//Recieving message back and printing it out to webpage
client.on('message', function (message) {
var HOST= req.body.ip;
var PORT= req.body.port;
fs.readFile('index3.html', 'utf-8', function(err, content) {
if (err) {
res.end('error occurred');
return;
}
var temp = message.toString(); //here you assign temp variable with needed value
var renderedHtml = ejs.render(content, {temp:temp, host: HOST, port: PORT}); //get redered HTML code
res.write(renderedHtml);
//var data = [{x:[req.body.number], y:[temp], type: 'scatter'}];
//var layout = {fileopt : "overwrite", filename : "simple-node-example"};
//plotly.plot(data, layout, function (err, msg) {
//if (err) return console.log(err);
//console.log(msg);
//});
});
});
}
});
//Setting up listening server
app.listen(3000, "192.168.0.136");
console.log('Listening at 192.168.0.136:3000');
我创建了一个连续按钮,使用setInterval每10秒发送一次相同的UDP数据包,但是因为我在index3.html中读取。每次收到消息时都会复制该html文件。图为你说明的。我希望能够在每个数据包之后更新输出。
答案 0 :(得分:0)
如果您希望服务器能够将未来的更新发送到页面(我猜你在这里尝试解决的真正问题是什么),那么http请求/响应根本就不是正确的架构
相反,您需要一种服务器推送形式,服务器只要希望页面可以接收该数据,然后将其插入页面,就可以将数据发送到页面。
这些天的常用机制是webSocket或更高级别的变体,socket.io。
在socket.io方案中,服务器为传入的socket.io连接设置一个侦听器。然后,任何希望能够接收更新的页面都会与服务器建立socket.io连接,并为某些消息注册侦听器。然后,当在服务器上发生感兴趣的事情并且它想要通知一个或多个连接的网页时,服务器可以向该网页发送socket.io消息。该网页将接收该消息,然后它可以随意处理(例如,用新数据更新当前显示的网页)。
您可以在此处详细了解socket.io:http://socket.io/。
除了webSocket之外的另一个选择是你的网页定期向你的服务器发送一个ajax调用,你的服务器可以返回它拥有的任何新数据,然后客户端可以处理这些数据(类似于webSocket的方式)它发送的过程数据)。这称为客户端轮询。它实现起来可能稍微简单一些,但它的可扩展性较差,而且通常不具备响应性,因为客户端必须定期询问服务器是否有任何新内容,大多数情况下服务器只会响应“没有新的东西”。
将来,我建议您避免发布三个与here,here和here非常接近的问题。应编辑问题以使其清晰,而不是仅仅重新发布。而且,新问题应该与先前的问题有很大不同。如果你没有得到你的问题的答案,可能是因为你不清楚你在问什么。