Sockets 关于如何使用yap';s插座\u选择/5?

Sockets 关于如何使用yap';s插座\u选择/5?,sockets,prolog,swi-prolog,yap,Sockets,Prolog,Swi Prolog,Yap,我正在尝试编写一个prolog服务器,以便能够从用另一种编程语言(Python、JavaScript等)编写的客户端查询用prolog编写的知识库,就像查询SQL数据库一样 我本以为这是一件很平常的事情,但我在网上找不到任何例子 所有必需的套接字函数似乎都列在上,我之所以使用yap而不是swi-prolog,是因为我想使用Unix套接字,而不是TCP/IP套接字。但是我将在这里使用AF_INET,因为swi prolog不支持AF_UNIX 编写从客户端写入字符串的服务器很容易: #!/usr/

我正在尝试编写一个prolog服务器,以便能够从用另一种编程语言(Python、JavaScript等)编写的客户端查询用prolog编写的知识库,就像查询SQL数据库一样

我本以为这是一件很平常的事情,但我在网上找不到任何例子

所有必需的套接字函数似乎都列在上,我之所以使用yap而不是swi-prolog,是因为我想使用Unix套接字,而不是TCP/IP套接字。但是我将在这里使用AF_INET,因为swi prolog不支持AF_UNIX

编写从客户端写入字符串的服务器很容易:

#!/usr/bin/yap -L --

:- initialization(main).

main :-
    socket('AF_INET', Socket),
    socket_bind(Socket, 'AF_INET'('localhost', 1234)),
    socket_listen(Socket, 2),
    socket_accept(Socket, _Client, Stream),
    read(Stream, Term),
    write(Term),
    socket_close(Socket).
我使用的简单Python 3客户端如下所示:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 1234))
sock.send(b"'Hello World\n'")
sock.close()

棘手的是让服务器将字符串回显到客户端,据我所知,这需要socket_select/5。但是从可用的文档中我不知道如何使用它。

为什么要使用套接字?在本地运行web服务器并通过HTTPS进行通信很容易。为什么要使用套接字?很容易在本地运行web服务器并通过HTTP进行通信