如何实现从一个进程到另一个进程的即发消息?

时间:2015-02-26 03:40:09

标签: udp ipc messaging fire-and-forget

点击一个按钮,一个简单的消息将从一个进程发送到另一个进程,消息将只是一个带有字符串参数的简单命令,共计50个字符(绝对远小于1k),如< / p>

DisplaySomeInfo("param1", "param2")

并满足以下条件:

  • 必须简单(即没有完整的邮件系统)
  • 必须在Windows上运行,应该在Unix上运行
  • 下图显示了我的实际要求,但应该适用于任何主要的编程语言/运行时
  • 性能并不重要,整个发送/接收周期不应超过一毫秒但是这样一条简单的消息
  • &#34;保证交付&#34;等。不必要
  • 发件人不在乎接收者是否收到消息 - 或者首先是否有接收者
  • 无需加密/身份验证/授权

在维基百科中有一个很长的list of ways to do IPC,但最简单的似乎是非连接套接字选项。

有没有更好的方法(更容易实现/维护/调试,更多的未来证明......)而不是简单地发送/接收UDP数据包(每个数据包一个消息,TTL = 0),再加上一个JSON(de)序列化器?

enter image description here

1 个答案:

答案 0 :(得分:0)

对于这些要求,只需将UDP单播数据包发送到localhost上的某个端口似乎是理想的选择。唯一的问题是必须选择并修复端口号。但如果这不是问题,那么简单地发送和接收UDP数据包就像它一样容易,而不需要第三方库。

从.Net应用程序发送UDP数据包的Bare-bones示例:

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编码。