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