我有软件在内部的客户服务器上运行,并且有多个软件,我希望在任何软件发生故障时它应该向我发送电子邮件 它可能是一种痛苦的促成和配置以与客户邮件服务器一起使用。 我想在NodeJS中编写简单的socket程序来读取错误日志文件并将这些消息推送到应该处理发送邮件的服务器 或者可能是要求发送电子邮件的网络服务。 如果有人使用过这样的东西请告诉我或者某处有什么简单的解决方案吗?
更新我的问题
根据评论,我试图在这里实现相同的解决方案是我的主要nodejs服务器文件,我现在正面临Socket事件发射中的问题。我想在log.xml文件发生更改时发出socket事件,这只运行一次。
var app = require('http').createServer(handler),
io = require('socket.io').listen(app),
parser = new require('xml2json'),
fs = require('fs');
app.listen(8030);
console.log('server listening on localhost:8030');
// creating a new websocket to keep the content updated without REST call
io.sockets.on('connection', function (socket) {
console.log(__dirname);
// reading the log file
fs.readFile(__dirname + '/var/home/apache/log.xml', function (err, data) {
if (err)
throw err;
// parsing the new xml data and converting them into json file
var json = parser.toJson(data);
// send the new data to the client
socket.emit('error', json);
});
});
/* Email send services This code to in my client server outside of main socket server cloud This part is working fine I tested it in my different server
var socket = io.connect('http://localhost:8030');
socket.on('error', function (data) {
// convert the json string into a valid javascript object
var _data = JSON.parse(data);
mySendMailTest(_data);
*/
请为我道歉,因为我是stackoverflow社区的新手。
答案 0 :(得分:0)
我认为你的套接字代码没有问题,你需要在读取文件之前使用fs.watchFile。这是类似于Angular Watch的监视功能,它将检测您的文件发生的任何更改并在回调中运行另一个函数以发出套接字
https://nodejs.org/docs/latest/api/fs.html#fs_fs_watchfile_filename_options_listener
#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
int main() {
int vetor[MAX];
int limite;
scanf("%d", &limite);
for (int i = 0; i <= limite; i++){
vetor[i] = i;
}
/* Marcar todos os compostos */
for (unsigned long long i = 1; i < limite/2; i++){
for (unsigned long long j = i; j< limite/2; j++){
unsigned long long aux = i + j + 2 * i * j;
if(aux <= limite)
vetor[aux] = 0;
}
}
/* Imprimir os verdadeiros primos, incluíndo o 2 */
printf("2\n");
for (int i = 1; i <= limite; i++){
if (vetor[i] != 0){
long aux = i*2 + 1;
if (aux < limite){
printf("%ld\n",aux);
}
}
}
return 0;
}