Udp 如何实现从一个进程到另一个进程的fire and forget消息传递?

Udp 如何实现从一个进程到另一个进程的fire and forget消息传递?,udp,ipc,messaging,fire-and-forget,Udp,Ipc,Messaging,Fire And Forget,点击一个按钮,一条简单的消息将从一个进程发送到另一个进程,消息将只是一个带有字符串参数的简单命令,总共大约50个字符(肯定少于1k),如 并满足以下要求: 必须简单(即没有成熟的消息传递系统) 必须在Windows上运行,应在Unix上运行 下图显示了我的实际需求,但它应该适用于任何主要的编程语言/运行时 性能并不重要,但对于这样一条简单的消息,整个发送/接收周期不应超过一毫秒 无需“保证交付”等 发送方不关心接收方是否收到了该消息,或者是否首先有接收方 无需加密/认证/授权 在wikipe

点击一个按钮,一条简单的消息将从一个进程发送到另一个进程,消息将只是一个带有字符串参数的简单命令,总共大约50个字符(肯定少于1k),如

并满足以下要求:

  • 必须简单(即没有成熟的消息传递系统)
  • 必须在Windows上运行,应在Unix上运行
  • 下图显示了我的实际需求,但它应该适用于任何主要的编程语言/运行时
  • 性能并不重要,但对于这样一条简单的消息,整个发送/接收周期不应超过一毫秒
  • 无需“保证交付”等
  • 发送方不关心接收方是否收到了该消息,或者是否首先有接收方
  • 无需加密/认证/授权
在wikipedia中有一个很长但最简单的选项似乎是非连接套接字选项

除了简单地发送/接收UDP数据包(每个数据包一条消息,TTL=0),比如与JSON(反)序列化器结合使用,还有什么更好的方法(更容易实现/维护/调试,更经得起未来考验……)来实现它吗


对于这些要求,只需将UDP单播数据包发送到本地主机上的某个端口就可以了。唯一的问题是必须选择并固定端口号。但如果这不是一个问题,那么简单地发送和接收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编码。

看看0mq
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();
}