Какие-нибудь примеры того, как использовать yap's socket_select/5?

Я пытаюсь написать сервер пролога, чтобы иметь возможность запрашивать базу знаний, написанную на прологе, у клиента, написанного на другом языке программирования (Python, JavaScript, что угодно...), так же, как и база данных SQL.

Я бы подумал, что это довольно распространенная вещь, но я не могу найти никаких примеров в Интернете.

Все необходимые функции сокетов перечислены в https://www.dcc.fc.up.pt/~vsc/Yap/documentation.html и причина, по которой я использую yap вместо swi-prolog, заключается в том, что я хочу использовать сокет Unix, а не сокет TCP/IP. Но я буду использовать AF_INET здесь, поскольку AF_UNIX не поддерживается swi-prolog.

Написать сервер, который пишет строку с клиента, легко:

#!/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. Но я не знаю из имеющейся документации, как его использовать.

0 ответов

Другие вопросы по тегам