c# – 在Mono中处理通信的简单跨平台流程?

前端之家收集整理的这篇文章主要介绍了c# – 在Mono中处理通信的简单跨平台流程?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的工作,这将在 Linux,Mac和Windows上运行,并且需要为应用程序以简单的字符串消息发送到对方的能力(在单一OS)单声道应用.

具体来说,我想要一个单一实例应用程序.如果尝试启动第二个实例,则会将消息发送到已运行的单个实例.

DBus出来了,因为我不想这样做是额外的要求.
套接字通信似乎很难,因为Windows似乎不允许连接的权限.
Mono中似乎不支持内存映射文件.
命名管道似乎在Mono中不被支持.
IPC似乎不被Mono支持.

那么,有没有一种简单的方法在一台机器上发送串消息的服务器的应用程序,每个操作系统运作,而无需权限,或额外的依赖?

解决方法

我在单声道邮件列表中写了这个.考虑了几个通用的进程间消息传递系统,包括DBus,System.Threading.Mutex类,WCF,Remoting,命名管…结论基本为 mono doesn’t support Mutex class(适用于线程间,不用于进程间)和 there’s nothing platform agnostic available.

我只能想象三种可能的解决方案.都有自己的缺点.也许有一个更好的解决方案可用,或者也许只是更好的解决方案为特定目的,或者也许存在一些跨平台的第三方库,你可以包括在你的应用程序(我不知道)但是这些是我最好的解决方案到目前为止已经能够找到:

>在已知位置打开或创建一个文件,并使用独占锁. (FileShare.None).每个应用程序尝试打开文件,执行其工作并关闭文件.如果没有打开,Thread.Sleep(1),然后再试一次.这是一种贫民窟,但跨平台提供跨进程互斥.>套接字.第一个应用程序侦听本地主机,一些高编号的端口.第二个应用程序尝试监听该端口,因为无法打开(因为某些其他进程已经拥有它),所以第二个进程向已在该端口上侦听的第一个进程发送一个消息.>如果您有权访问事务数据库,或者使用消息传递系统(sqs,rabbitmq等).>当然,您可以检测到您正在使用哪个平台,然后在该平台上使用任何功能.

猜你在找的C#相关文章