2014-09-20 2 views
3

Я не уверен, как полностью использовать библиотеку OCaml Websocket. Я надеялся, что кто-то может помочь мне с простым примером. Я пытаюсь протестировать библиотеку на websocket.org. Я просто пытаюсь отправить сообщение, а затем распечатать ответ. Я смущен тем, как использовать/получить доступ к функциям, возвращаемым ws_conn. Я думал, что могу сделать что-то вроде let push,print = ws_conn in или let push,print = Websocket.open_connection ~tls:false ws_addr in, но это не кажется правильным. Вот что я до сих пор.Пример OCaml Websocket

#require "websocket";; 

    (* Set up the websocket uri address *) 
    let ws_addr = Uri.of_string "ws://echo.websocket.org" 

    (* Set up the websocket connection *) 
    let ws_conn = Websocket.open_connection ~tls:false ws_addr 

    (* Set up a frame *) 
    let ws_frame = Websocket.Frame.of_string "Rock it with HTML5 WebSocket" 

    (* Function to handle replies *) 
    let with_reply s = 
     match s with 
     | Some x -> 
      let line = Websocket.Frame.content x in 
      print_string line 
     | None -> 
      print_string "Error Recieved no reply ..." 

ответ

5

Спасибо nlucaroni, после дальнейшего чтения я создал конкретный пример в качестве ответа на мой вопрос.

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

    (* Set up the uri address *) 
    let ws_addr = Uri.of_string "ws://echo.websocket.org" 

    (* Set up the websocket connection *) 
    let ws_conn = Websocket.open_connection ~tls:false ws_addr 

    (* Function to print a frame reply *) 
    let f (x : Websocket.Frame.t) = 
     let s = Websocket.Frame.content x in 
     print_string s; 
     Lwt.return() 

    (* push a string *) 
    let push_msg = 
     ws_conn 
     >>= fun (_, ws_pushfun) -> 
     let ws_frame = Websocket.Frame.of_string msg in 
      ws_pushfun (Some ws_frame); 
      Lwt.return() 

    (* print stream element *) 
    let print_element() = 
     ws_conn 
     >>= fun (ws_stream, _) -> 
     Lwt_stream.next ws_stream 
     >>= f 

    (* push string and print response *) 
    let push_print msg = 
     ws_conn 
     >>= fun(ws_stream, ws_pushfun) -> 
     let ws_frame = Websocket.Frame.of_string msg in 
     ws_pushfun (Some ws_frame); 
     Lwt_stream.next ws_stream >>= f 
+0

хорошо выглядит. Рад, что смог помочь. :) – nlucaroni

+0

Этот API больше не работает, библиотека Websocket больше не имеет функции «open_connection». –

3

В open_connection функция возвращает,

(Frame.t Lwt_stream.t * (Frame.t option -> unit)) Lwt.t 

'a Lwt.t является поток, который возвращает пару потока печати и нажимной функцию для вашего использования. Вы используете 'a Lwt.t монадическим способом, а простой учебник можно найти http://ocsigen.org/lwt/manual/.

Смежные вопросы