我在nodejs中创建了一个Web服务器体系结构,它在运行时提供网页。 另一方面,我有一个Qt GUI应用程序。 我需要在这两者之间建立一个接口。 我已经使用QProcess创建了这两者之间的连接(服务器现在从这个Qt应用程序启动) 现在我想在它们之间交换一些数据,例如从GUI返回的网页上的随机消息。 stdin /没有任何用处吗? 你能指导我一下吗?这是我的服务器代码:
`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);`
答案 0 :(得分:0)
我认为您不必将服务器作为GUI程序的子进程,反之亦然。
您需要一些IPC(Inter-process communication)机制,例如shared memory
或named pipe
。
通常用于网络编程的Socket
也可用于使两个进程可通信。
(我刚发现node.js
没有FIFO(named pipe)
或shared memory
个套餐。所以,似乎只有这样才能实现您的需求:{{1 }}。)
答案 1 :(得分:0)
是的,QProcess
可以抓住stdout
,stderr
。您可以使用进程发出的readyReadStandardOutput信号来监听其输出,然后通过readAllStandardOutput()等任何qprocess读取方法读取..也可以让您的gui使用{{3}向nodejs标准输入发送消息继承的功能。