SWI-Prolog ERROR: No permission to open websocket
SWI-Prolog ERROR: No permission to open websocket
我尝试了下面的代码,我得到了:
错误:无权打开 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, []).
抽象来说,如果你使用root(X)
,那么这意味着可用的路径是/X
。
因此,如果您指定 root(ws)
,那么在您的情况下,您将必须访问:
ws://localhost:9999/ws
如果您指定 root(.)
那么 /
就足够了等等
下次,请指定一个完整示例,以便其他人可以实际试用您的代码,而不必猜测您代码段的其余部分。
我尝试了下面的代码,我得到了:
错误:无权打开 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, []).
抽象来说,如果你使用root(X)
,那么这意味着可用的路径是/X
。
因此,如果您指定 root(ws)
,那么在您的情况下,您将必须访问:
ws://localhost:9999/ws
如果您指定 root(.)
那么 /
就足够了等等
下次,请指定一个完整示例,以便其他人可以实际试用您的代码,而不必猜测您代码段的其余部分。