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