首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有代理的本地机器上的多对多消息传递

没有代理的本地机器上的多对多消息传递
EN

Stack Overflow用户
提问于 2011-09-26 12:35:32
回答 4查看 426关注 0票数 2

我正在寻找一种机制来创建一个简单的多对多消息传递系统,允许Windows应用程序在一台机器上进行通信,但可以跨会话和桌面进行通信。

我有以下严格要求:

  1. 必须在一台机器上跨所有Windows会话工作。
  2. 必须在Windows及更高版本上工作。
  3. 不需要全局配置。
  4. 没有中央协调器/代理/服务器。
  5. 不得要求从应用程序中提升权限。

I不需要保证消息的传递。

我看过很多很多选择。这是我对想法的最后请求。

下列行为因违反上述一项或多项要求而被拒绝:

ZeroMQ:为了进行多到多的消息传递,需要一个中央代理。

命名管道:需要中央服务器接收并转发消息。

多播套接字:需要具有有效IP地址(即全局配置)的正确配置的网卡。

共享内存队列:要在全局命名空间中创建共享内存,需要提升权限。

多播套接字几乎可以工作。还有人能提出什么建议吗?我会考虑任何东西,从预先打包的库到裸露的Windows功能。

(9月27日编辑)更多一些上下文:

所谓“中央协调器/代理/服务器”,我指的是在应用程序试图发送消息时必须运行的单独进程。我所看到的问题是,在需要的时候,不可能保证这个过程真的会运行。通常会使用Windows服务,但无法保证在任何用户登录之前始终启动特定服务,也无法保证该服务不会因某种原因而停止。在服务启动时发送第一条消息时,“按需运行”会导致延迟,并引发特权问题。

多播套接字几乎可以工作,因为它能够完全避免中央协调进程的需要,并且不需要来自发送或接收多播数据包的应用程序的提升权限。但是您必须有一个配置好的IP地址--您不能在回送接口上进行多播(即使在配置的网卡上使用TTL=0的多播行为与人们预期的环回多播行为一样)--这就是打破协议的关键。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-11 12:10:45

最后,我决定,其中一个困难的要求必须走,因为问题不能以任何合理的方式解决,正如最初所说的。

我的最后一个解决方案是运行命名管道服务器的Windows服务。任何应用程序或服务都可以连接到管道的实例并发送消息。服务器接收的任何消息都回显到所有管道实例。

我真的很喜欢p.marino的答案,但最终它看起来非常复杂,因为它是一个非常基本的功能。

另一种吸引我的可能性,尽管它再次陷入了复杂性的障碍,就是编写一个内核驱动程序来管理多播。在这种情况下可能有几种机制,但是编写一个没有bug的内核驱动程序的开销太高了。

票数 0
EN

Stack Overflow用户

发布于 2011-09-26 13:09:20

也许我完全误解了这个问题,尤其是“没有中央经纪人”,但是你有没有考虑过基于元组空间的一些东西?

-在意见交换后,请考虑以下是我的“明确”答案:

使用基于文件的解决方案,并在拉米德上承载目录树以确保良好的性能。

我还建议查看下面的StackOverflow讨论 (即使是基于Java的),看看如何管理文件系统上的锁定和事务的可能指针。

这一个 (基于.NET的)也可能有帮助。

票数 1
EN

Stack Overflow用户

发布于 2011-09-26 12:41:18

UDP 广播业怎么样?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7555137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档