7

据我了解,IOLibusocket具有几乎相同的抽象级别。IOLib 使用操作系统后端套接字,另一方面 usocket 使用 Lisp-runtime-backend 套接字。

我只是想知道对于特定用例来说哪个是更好的选择。

例如,需要高并发的服务器,或者注重可移植性的客户端等。

4

3 回答 3

4

我想,这篇博文回答了你的问题。

总而言之,如果您正在编写一个库,它应该适用于所有平台和实现(具有“所有”的合理定义),请使用 usocket。对于 Unix 平台上的其他用例,IOLib 可能更通用。例如,它支持 Unix 域套接字,以及非阻塞 IO。

顺便说一句,我已经将 cl-redis 从 usocket 移植到 IOLib 并返回 - API 非常相似,尽管略有不同。

于 2012-11-23T04:13:39.673 回答
2

USOCKET 的代码比 IOLib 更小更简单,包括依赖项。IOLib 使用 CFFI 绑定到一些 *BSD 中不存在的 Linux 功能,例如。

在所有其他条件相同的情况下,尽可能少的源代码总是更可取,因为它意味着更少的错误,因为它更容易理解和破解。更简单的代码可以更快地调试,并且更容易部署。

除此之外,它们的工作方式似乎大致相同:它们都提供 kqueue/select 来处理单个线程中的多个连接。我不确定更高级的功能,例如在套接字中传递 unix 文件描述符。

我想说,如果您只喜欢 Linux,请使用 IOLib 或 USOCKET;如果您的目标是 Linux 和/或 *BSD,或其他商业操作系统,或者喜欢保持简单和愚蠢,请使用 USOCKET。

于 2012-12-15T14:05:45.477 回答
1

如果您的主要目标是可移植性,显然 usockets 是更好的选择,因为正如本页所述:

USOCKET 是用于 BSD 样式套接字的网络可移植层。

于 2012-11-22T22:31:04.193 回答