English 中文(简体)
Server- client 包含进程间通信功能的服务器- 客户记录结构。 您知道解决方案吗?
原标题:Server-client logging architecture with interprocess communication feature. Do you know the solution?

现在我有:

  • a multithreaded windows service written in C++ which use common static libraries as well as dynamic DLLs;
  • each thread performs different tasks and produces different errors (DB errors, function invocation errors, etc.). Each thread further will act as a logger client (and will send all messages to a logger server);
  • a separate thread which has no body yet, but which will act as a logger server for handling all log messages from the logger clients.

我需要一个良好的建议,说明我应该如何将以下想法落实到一个工作解决方案中。 想法是“ 强” 将服务器客户记录结构添加到我的多行服务器 < / 强”, 并符合以下要求( 虽然有些部分我需要自己执行, 但请只考虑 < code> logger 客户端 和 < code> logger 服务器 的基本想法 ):

  1. 应该有许多 log 客户 (如我已提到, log 客户 只是一个存在的工作线索),每个客户都应 < strong> 注册一个实体,名称独特或/和ID 并有以下行为:

    • 如果 logger server 服务器 正在运行, 这个 log 客户端 开始发送日志信息,

    • 否则( log server is down), log client 将试图使用小的超时,无休止地用 log server 注册为 server

  2. 应该有一个 logger server 服务器 , 其行为如下:

    • log 服务器 登记了所有 log 客户 及其独有名称或/ ID 和无尽检查,如果新日志客户正在注册的话

    • log 服务器 < strong> handles all message from different 客户 客户 并写到 DB、 文件等 。

    • 在连接时, < code> 服务器 < code> server service 应该有 < strong> 机会从外部应用程序 (例如, < strong> MySuperThreadViewerProgram 监测所有线索活动/errors/etc)。 在连接时, < code> 服务器 应该考虑外部应用程序,将其作为一个又一个 客户端 . > 。 < strong > 这是最重要的要求。

总而言之,有3个建筑部分需要实施 < 强 > /强 > :

  1. Server-client logger architecture;
  2. Message queue facility between log clients and log server. And log server periodically checks if there any available log clients to be registered;
  3. Inter-process communication between log server and external application, where the latter acts as a new log client.

请注意, 我将 < code> logger 服务器 视为一种 < strong > 消息路由器

因此,主要问题是:

是否有任何解决办法(软件框架)具有上述所有特征(最好有`坚固 ',最好有

如果答案是:"没有这样的解决方案" 你能回顾一下我所做的选择吗:

  • For #1: using Pantheios logger framework;
  • For #2: using any kind of register-subscribe library with server-client architecture and message-queue support (update: ipc library) ;
  • For #3: using Boost.Interprocess - using SharedMemory.

<强 > UPATE:

The good example of #2 is this ipc library. And may be I was a bit incorrect describing logger client - logger server relations, but what I really mean is similar to approach, fully described and implemented in ipc library: when one entity (thread) subscribes to another to receive its messages (or "publish-subscribe" model). And I want to use a kind of this technique to implement my logging architecture. But in what way?


<强> UPATE2:

操作系统是 Windows 。 是的, 我知道 Linux 下有一堆有用的工具和框架( D- Bus, Syslog ) 。 你们中可能有些人能为跨平台库提供有用的链接 。 也许在 Windows 下有一个 < strong > > lugger 框架, 而不是 D- Bus < / strong >?


任何评论均不胜感谢。

非常感谢!

最佳回答

QMQ(零MQ)可能是你提到的IPc图书馆的可行替代办法,因为它有许多与你的要求相符的特征。

它完全支持 PUB/SUB 模式, 允许您在线条、 bteween 进程甚至机器之间工作。 它是一个客户端服务器结构、 信息队列和 IPC 一样工作 。

当然,你需要一个特定的编码和解码方式, 协议缓冲确实是一个好主意。

问题回答

据我所知,在连接时会指定登录后端的全神座(即日志汇: DB、 文件或其它什么) 。 进入后端的日志的强度可以在发射时指定, 运行时也会有一些简单的节奏 。

如果我对您正确的话, 那么您就会有一个进程( 我们暂时忘记外部应用程序), 多条工人线索正在运行 。 其中一些线索应该登录到一个共同的后端( 如 DB), 有些线索应该登录到另一个 。 因为 Pantheios 无法完成这个外部框, 您需要写一个自定义的后端, 该后端可以将日志连接到正确的后端 。

如果记忆消耗不是一个问题,而你不需要最快的记录性能,那么你也许想查看一下log4cxx, 因为它是高度可配置的, 并且可能使你免于执行客户-服务器结构, 以及它带来的同步问题。

关于外部应用程序:如果您能够保证它只有一个外部客户端,那么您就可以使用管道机制与服务进行通信。然后,服务进程将有一个单独的线条,与您的服务器线索相对应,打开一个命名的管道,也可以指定为日志汇,以便您的工人线索可以登录到它和其他日志汇(数据库、文件等)。

也有一些类比服务器要赢。 例如 Winsyslog 正在来自著名的类比仪的制作者。 一旦有类比仪运行, 就会有很多独立的类比仪客户端, 比如使用 Java 的 SysLog4j, 或者使用 Syslog 处理器进行 std. python 记录 。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签