SWI-Prolog错误:无权打开websocket

时间:2016-10-18 20:59:07

标签: prolog swi-prolog

我尝试了下面的代码,然后得到了:

错误:无权打开websocket`'ws :: // localhost:9999''

为什么?

如果我使用root(。),那没关系。

更新(正确代码):

:- use_module(library(http/websocket)).
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/http_path)).
:- use_module(library(http/http_authenticate)).

:- initialization main.

main :-
    run.

:- http_handler(root(ws), http_upgrade_to_websocket(echo, []), [spawn([])]).

echo(WebSocket) :-
    ws_receive(WebSocket, Message),
    (   Message.opcode == close
    ->  true
    ;   ws_send(WebSocket, Message),
        echo(WebSocket)
    ).

run :-
    run(9999).

run(Port) :-
    http_server(http_dispatch, [port(Port)]).

stop :-
    stop(9999).

stop(Port) :-
    http_stop_server(Port, []).

1 个答案:

答案 0 :(得分:2)

抽象地说,如果您使用root(X),则表示可用的路径为/X

因此,如果您指定root(ws),那么在您的情况下,您必须访问:

ws://localhost:9999/ws

如果您指定root(.),则/就足够了。

下次请指定完整示例,以便其他人可以实际试用您的代码,而无需猜测代码段的剩余部分。