1

SWI-Prologを使おうとするとhttp_post/4、次のようになります。

:- use_module(library(http/http_client).

update(URL, Arg) :-
    http_post(URL, form([update = Arg), _, [status_code(204)]).

このルールを照会し、TCPトラフィックを監視すると、HTTP POST要求と、予想される204ステータスコードでの応答の両方がすぐに発生することがわかります。ただし、Prologは最大30秒間ハングしてから、「true」に戻ります。ルールがすぐに戻らないようにするために何が起こっていますか?

私もこのバリアントを試しましたが、ハングします:

:- use_module(library(http/http_client).

update(URL, Arg) :-
    http_post(URL, form([update = Arg), Reply, [status_code(204)]),
    close(Reply).

、でも同様の問題がありますhttp_delete/3が、ではありませんhttp_get/3

4

1 に答える 1

2

ライブラリのドキュメントには、http_post

http_post_data / 3を使用して投稿される入力ドキュメントを提供することを除いて、http_get/3と同等です。

http_getのオプションにはtimeout(+ Timeout)があります。これはレイテンシーを下げるのに役立つかもしれませんが、デフォルトで+ infiniteに設定されているため、問題が解決しないのではないかと心配しています。呼び出しているサービスが、タイムアウトまで接続を維持しているようです。

個人的には、httpsでGoogle APIサービスを呼び出すときに、http_postではなくhttp_openを使用する必要がありました...

于 2012-06-20T07:23:06.550 に答える