我想获取系统通知并通过http将其传递给客户端。
现在我使用node.js在一个进程中提供这两个服务,但是存在问题。 通知侦听器有自己的主循环侦听系统事件,并且当服务启动时,它使服务器停止提供http服务。我想如果我能将这两种服务的主循环合二为一,那么问题就可以解决了。这可能吗?我怎么才能开始?
谢谢,
以下是示例代码:
var server = require("express").createServer(),
io = require('socket.io').listen(server);
server.listen(8000);
server.get("/", function (req, res) {
res.sendfile("./public/main.html");
});
io.of('/images').on('connection', function (socket) {
//read images and transfer
}
io.of('/notify').on('connection', function (socket) {
//start listen system notifications
notifyLib.start_daemon();
}
“notifyLib.start_daemon()”是一个原生扩展,其代码如下:
DBusError error;
int rt;
dbus_error_init (&error);
connection = dbus_bus_get (DBUS_BUS_SESSION, &error);
if (dbus_bus_name_has_owner(connection, DBUS_NAME, &error))
printf("*** DBUS_NAME had owner\n");
rt = dbus_bus_request_name (connection, DBUS_NAME, 0, &error);
if (!dbus_connection_add_filter (connection, filter_func, NULL, NULL))
printf("*** Failed to add filter\n");
if (!dbus_connection_register_object_path (connection, DBUS_PATH, &echo_vtable, (void*) 0xdeadbeef))
printf("*** Failed to register object path\n");
while (dbus_connection_read_write_dispatch (connection, -1))
;
dbus_connection_remove_filter (connection, filter_func, NULL);
dbus_connection_unref (connection);
dbus_shutdown ();
要传输的图像很多,但是当监听器启动时,图像传输会停止。
答案 0 :(得分:0)
答案 1 :(得分:0)
从节点,您可以制作一个定时器来调用dbus_connection_read_write_dispatch()吗?
然后你可以删除while()循环。
您必须将dbus清理代码移动到节点可以在处理完DBus时调用的函数。