如何实现从一个进程到另一个进程的即发即弃消息传递?
Posted
技术标签:
【中文标题】如何实现从一个进程到另一个进程的即发即弃消息传递?【英文标题】:How to implement fire-and-forget messaging from one process to another? 【发布时间】:2015-04-28 08:02:04 【问题描述】:点击一个按钮,一条简单的消息就会从一个进程发送到另一个进程,该消息只是一个带有字符串参数的简单命令,总共大约 50 个字符(绝对小于 1k),例如
DisplaySomeInfo("param1", "param2")
并满足以下条件:
必须简单(即没有成熟的消息传递系统) 必须在 Windows 上运行,应该在 Unix 上运行 下图显示了我的实际需求,但它应该适用于任何主要的编程语言/运行时 性能并不重要,对于这么简单的消息,整个发送/接收周期不应超过一毫秒 “保送”等不必要 发送者不关心接收者是否收到消息 - 或者是否有接收者首先 无需加密/认证/授权在***中有一个很长的list of ways to do IPC,但最简单的似乎是非连接套接字选项。
有没有比简单地发送/接收 UDP 数据包(每个数据包一条消息,TTL=0)更好的方法(更容易实现/维护/调试,更多的未来证明......)来实现它,比如加上一个JSON(反)序列化器?
【问题讨论】:
看看0mq zeromq.org 【参考方案1】:对于这些要求,简单地将 UDP 单播数据包发送到 localhost 上的某个端口似乎是理想的。唯一的问题是必须选择和固定端口号。但如果这不是问题,那么简单地发送和接收 UDP 数据包就非常简单,无需第三方库。
从 .Net 应用程序发送 UDP 数据包的简单示例:
public static void SendUdpPacket(int destinationPort, string payload)
IPEndPoint endPoint =
new IPEndPoint(IPAddress.Parse("127.0.0.1"), destinationPort);
byte[] buffer = Encoding.UTF8.GetBytes(payload);
Socket socket =
new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.SendTo(buffer, endPoint);
socket.Close();
唯一悬而未决的问题是如何编码多个参数。但为此有无数种方法,许多语言都内置了 HTTP URL 编码。
【讨论】:
以上是关于如何实现从一个进程到另一个进程的即发即弃消息传递?的主要内容,如果未能解决你的问题,请参考以下文章