我尝试了下面的代码,然后得到了:
错误:无权打开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, []).
答案 0 :(得分:2)
抽象地说,如果您使用root(X)
,则表示可用的路径为/X
。
因此,如果您指定root(ws)
,那么在您的情况下,您必须访问:
ws://localhost:9999/ws
如果您指定root(.)
,则/
就足够了。
下次请指定完整示例,以便其他人可以实际试用您的代码,而无需猜测代码段的剩余部分。