【问题标题】:Exchange data between Qt Application and nodejs server在 Qt 应用程序和 nodejs 服务器之间交换数据
【发布时间】:2018-04-02 08:13:12
【问题描述】:

我在 nodejs 中创建了一个 Web 服务器架构,它在运行时为网页提供服务。 另一方面,我有一个 Qt GUI 应用程序。 我需要在这两者之间建立一个接口。 我已经使用 QProcess 创建了这两者之间的连接(服务器现在从这个 Qt 应用程序开始) 现在我想在它们之间交换一些数据,例如来自 GUI 和返回的网页上的随机消息。 标准输入/输出在这里有什么用吗? 你能指导我完成这个吗?这是我的服务器代码:

 `function init() {

var __website = path.join(__dirname, 'Website/');
var __css = path.join(__dirname, 'css/');

app.use(bodyParser.json());
app.use(express.static(path.join(__website)));
app.get('/', function (req, res, next) {
    res.render('index', function (err, html) {
        res.send(html);
    });
});
app.get('/data/:iValue', function( req, res) {
process.stdin.on('readable', function() {
  var chunk = process.stdin.read();
  if (chunk != null) {
    res.json({response: chunk.toString("UTF-8")});
     }
 });
   process.stdout.write('request_data:' + temperature);

});
}
function initSocket() {
var Session = require('express-session');
var MemoryStore = require('session-memory-store')(Session);
var session = new Session({
 store: new MemoryStore(),
 secret: 'supersecret',
 resave: true,
 saveUninitialized: true
})

//io = require('socket.io')(https);
io = new ioServer();
io.use(ios(session));
// In-memory storage
// Begin listening for a websockets connection
io.on('connection', function (socket) {
    socket.emit('setRange', data.min, data.max);
    socket.emit('setEmails', data.emails);
    setInterval(function () {
    var temperature;
        //var temperature = Math.floor((Math.random() * 20) + 15);
        socket.emit('updateTemperature', {
            temperature: temperature
        });
        if (temperature < data.min || temperature > data.max) {
            // console.log('alert! ' + temperature + ' min:' + data.min + ' 
max:' + data.max)
            sendEmail(temperature);
            socket.emit('alert', {
                temperature: temperature,
                message: 'Temp is outside of Value Range'
            });
        }
    }, 2000);`

【问题讨论】:

标签: node.js qt stdout stdin qprocess


【解决方案1】:

是的,QProcess 可以抓握stdoutstderr。您可以使用进程发出的readyReadStandardOutput 信号收听其输出,然后通过任何 qprocess 读取方法(如readAllStandardOutput()..)进行读取。您也可以使用QIODevice::write(const char *data) 继承函数让您的 gui 将消息发送到 nodejs 标准输入。

【讨论】:

  • 看这个例子开始QProcess example,东西是nodejs,能读或写回std outpout/err。
  • 非常感谢!我会以这种方式进一步努力!
  • 您好 @Mohammad Kanan 先生,我已经尝试在我的应用程序中使用这些函数,现在应用程序在调试中返回错误。现在我想我必须在需要接收/发送数据的 server.js 中进行一些更改
  • 是的,你需要 server.js 来写入标准输出。也请不要将代码放在 cmets 中,它不容易阅读。
  • 例如;我的 qt 应用程序每秒显示一个随机值,变量名称为“itemp”,我需要将此值发送到我的网页,ID 为“Act_temp”(此时“Act_temp”收到一个来自 server.js 的 Math.random 值。为此,我应该在哪里更改我的代码?
【解决方案2】:

我认为您不必使服务器成为 GUI 程序的子进程,反之亦然。

这里需要一些IPC(Inter-process communication)机制,比如shared memory或者named pipe

而通常用于网络编程的Socket 也可用于使两个进程可通信。

(我刚刚发现node.js 没有FIFO(named pipe)shared memory 包。所以,您似乎只能使用Socket。)

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多