我需要制作一个如下图所示的桥梁。它只是一个 UDP 服务器,它接收来自客户端的数据包,并将其转发到另一台服务器。该图将很好地理解该场景。
+--------+sendto() recvfrom()+-----------+
| client |------------------->| | +-------------+
| | 1 | bridge |sendto() recvfrom() | |
| | | |------------------------>| duty |
| | | | 2 | server |
| | | |recvfrom() sendto() | processing |
| | | |<------------------------| |
| |recvfrom() sendto()| | 3 | |
| |<-------------------| | +-------------+
+--------+ 4 +-----------+
这里发送和接收数据的函数写在设备的侧面。通信过程由箭头符号下的数字 1、2、3 和 4 标识。我试图以一种可以代表时间线的方式绘制图形:从上到下。
现在进入正题。当我只有一个客户需要管理时,这很容易做到。但是让我们假设客户数量可以很多。假设客户端是使用拨号器连接到互联网的电话,而服务器是运行 Asterisk/Freeswitch 或类似设备的 SIP 服务器。在这种情况下,可能会出现许多客户端。我不想将桥接服务器用作代理服务器(运行 kamailio 和 rtpproxy),以便通信高效。
我知道 Asterisk 或 SIP 服务器可以管理 udp 会话。但怎么能过桥。由于 udp 没有会话,我该如何完成第四步。如何识别值班服务器对客户的回复?应该编写什么类型的软件(当然是为了效率而轻量级,我自己需要编写)来处理会话。如果有人可以通过 udp 给我一个会话管理的想法,那将对我非常有帮助。我搜索了很多,但没有找到任何合适的答案。
提前致谢。