gpt4 book ai didi

utf-8 - OCaml websocket "Invalid UTF8 data"

转载 作者:行者123 更新时间:2023-12-02 12:28:53 25 4
gpt4 key购买 nike

我正在尝试使用 Lwt 构建一个循环,将帧推送到 Websocket,等待响应,将其打印到屏幕上,等待 60 秒,然后再次重复该过程。我已经能够得到一些可以编译的东西,但我还没有 100% 正确。第一次通过循环一切正常,然后每次我都会收到错误消息“无效的 UTF8 数据”。我的 Lwt 循环或者我对 Websocket 协议(protocol)的理解一定有问题。我的代码:

#require "websocket";;
#require "lwt";;
#require "lwt.syntax";;

open Lwt

(* Set up the websocket uri address *)
let ws_addr = Uri.of_string "websocket_address"

(* Set up the websocket connection *)
let ws_conn = Websocket.open_connection ws_addr

(* Set up a frame *)
let ws_frame = Websocket.Frame.of_string "json_string_to_server"

(* push function *)
let push frame () =
ws_conn
>>= fun (_, ws_pushfun) ->
ws_pushfun (Some frame);
Lwt.return ()

(* get stream element and print to screen *)
let get_element () =
let print_reply (x : Websocket.Frame.t) =
let s = Websocket.Frame.content x in
Lwt_io.print s; Lwt_io.flush Lwt_io.stdout;
in
ws_conn
>>= fun(ws_stream, _) ->
Lwt_stream.next ws_stream
>>= print_reply

let rec main () =
Lwt_unix.sleep 60.0
>>= (push ws_frame)
>>= get_element
>>= main

Lwt_main.run(main ())

最佳答案

我不确定您的代码有什么特别错误的地方。它甚至无法在我的系统上编译。看起来您正在顶层进行试验并创建了一些奇怪的上下文。我已经以更简洁的方式重写了您的代码。首先,我传递一个到函数的连接,这样函数的作用就更清晰了。而且,一次又一次地等待同一个线程也不是一个好主意。 Lwt 不是这样做的。

open Lwt

(* Set up the websocket uri address *)
let ws_addr = Uri.of_string "websocket_address"

(* Set up a frame *)
let ws_frame = Websocket.Frame.of_string "json_string_to_server"

(* push function *)
let push (_,push) frame =
push (Some frame);
return_unit


(* get stream element and print to screen *)
let get_element (stream,_) =
let print_reply (x : Websocket.Frame.t) =
let s = Websocket.Frame.content x in
Lwt_io.printlf "%s%!" s in
Lwt_stream.next stream
>>= print_reply

let rec main conn : unit t =
Lwt_unix.sleep 60.0
>>= fun () -> push conn ws_frame
>>= fun () -> get_element conn
>>= fun () -> main conn

let () = Lwt_main.run (
Websocket.open_connection ws_addr >>= main)

关于utf-8 - OCaml websocket "Invalid UTF8 data",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com