据我了解,IOLib和usocket具有几乎相同的抽象级别。IOLib 使用操作系统后端套接字,另一方面 usocket 使用 Lisp-runtime-backend 套接字。
我只是想知道对于特定用例来说哪个是更好的选择。
例如,需要高并发的服务器,或者注重可移植性的客户端等。
我想,这篇博文回答了你的问题。
总而言之,如果您正在编写一个库,它应该适用于所有平台和实现(具有“所有”的合理定义),请使用 usocket。对于 Unix 平台上的其他用例,IOLib 可能更通用。例如,它支持 Unix 域套接字,以及非阻塞 IO。
顺便说一句,我已经将 cl-redis 从 usocket 移植到 IOLib 并返回 - API 非常相似,尽管略有不同。
USOCKET 的代码比 IOLib 更小更简单,包括依赖项。IOLib 使用 CFFI 绑定到一些 *BSD 中不存在的 Linux 功能,例如。
在所有其他条件相同的情况下,尽可能少的源代码总是更可取,因为它意味着更少的错误,因为它更容易理解和破解。更简单的代码可以更快地调试,并且更容易部署。
除此之外,它们的工作方式似乎大致相同:它们都提供 kqueue/select 来处理单个线程中的多个连接。我不确定更高级的功能,例如在套接字中传递 unix 文件描述符。
我想说,如果您只喜欢 Linux,请使用 IOLib 或 USOCKET;如果您的目标是 Linux 和/或 *BSD,或其他商业操作系统,或者喜欢保持简单和愚蠢,请使用 USOCKET。
如果您的主要目标是可移植性,显然 usockets 是更好的选择,因为正如本页所述:
USOCKET 是用于 BSD 样式套接字的网络可移植层。