1

是否有从普通 udp 套接字(使用 linux、C99/C++、recv系统调用)迁移到原始套接字的教程?

根据http://aschauf.landshut.org/fh/linux/udp_vs_raw/ch03s04.html 原始套接字比 udp 快得多。

应用程序是客户端-服务器。客户端是专有的,必须使用与 udp 服务器完全相同的协议。但是使用原始套接字服务器可以更快一些。我必须在服务器中实现 udp 的哪些部分?是否有“快速迁移”库?

4

1 回答 1

1

原始套接字允许您与较低级别的协议进行通信,例如以太网、IP 等。是的,降低可以给您带来一些优势,但是您必须平衡它与您失去的东西。

在这种情况下,您提到服务器被编写为使用 Udp 协议,因此在线路上,通信必须是 Udp。现在,如果您要使用原始套接字,则必须确保发送封装在 Udp 数据包中的应用程序数据。您还需要编写代码以确保您遵守 Udp 协议和状态机,以便对服务器而言,您的客户端只是另一个 Udp 客户端。完成所有这些需要编写大量代码,并且存在一些缺点,例如增加维护、增加使其正常工作的成本等。

我没有完全阅读您上面链接的论文,但要问自己的问题是,您能否获得该研究论文中给出的收益并将其复制到您的场景中?

在我看来,你应该首先弄清楚你的客户为什么这么慢。你有什么要求?你有什么衡量好的、快速的客户的标准吗?如果我是你,我会首先衡量当前的实现,牢记一些对场景有用的指标,例如传输的字节/秒等。然后我会分析客户端,看看它在哪里花费了太多时间,并尝试看看我是否可以减少开销并使其更快。

总而言之,在向下堆栈之前寻找堆栈顶部(即在您的应用程序中)的节省。如果你的应用程序写得不好,那么无论你走多低,你都不会看到你期望的性能提升。

于 2010-06-05T02:48:24.047 回答