Ocaml Lwt-多人游戏的一些实现

Ocaml Lwt-多人游戏的一些实现,ocaml,multiplayer,lwt,Ocaml,Multiplayer,Lwt,我将继续写一个tic-tac-toe服务器的简单实现(通过telnet)。任务玩家连接到服务器,在他们发送START之后,服务器会寻找一个键入START的伙伴,游戏开始。一段代码: let handle_income () = let con = Lwt_unix.accept sock in con >>= fun (cli, addr) -> let player = Lwt.return {state = Sleeping

我将继续写一个tic-tac-toe服务器的简单实现(通过telnet)。任务玩家连接到服务器,在他们发送START之后,服务器会寻找一个键入START的伙伴,游戏开始。一段代码:

let handle_income () =
        let con = Lwt_unix.accept sock in 
        con >>= fun (cli, addr) ->
        let player = Lwt.return {state = Sleeping; descriptor = Lwt.return cli} in
        send_to_client player "Welcome to the server. To start game type in START and press Enter";
        player;;

let rec make_ready player = 
        player >>= fun {state; descriptor} ->
            send_to_client player "Waiting for start command";
            let answer = read_from_client player in 
                answer >>= fun str ->
                match str with
                    |"Start" -> 
                        let ready_client =  Lwt.return { state = Ready; descriptor = descriptor} in 
                        ready_client
                    | _ -> 
                        send_to_client player "Unknown command. try again";
                        make_ready player;;
我对Ocaml(特别是Lwt)完全陌生。那么,你能不能给我一个建议,让球员们开始寻找另一名球员?我应该使用列表和所有时间迭代检查播放器状态、等待第二个播放器类型启动的高级函数(我不确定是否可能)、Lwt唤醒器、Lwt广播、创建另一个Lwt,直到有2个Lwt.t播放器或其他东西时才进行睡眠吗?我不知道如何以最聪明的方式实现这一点。非常感谢。

有一种可能性:

让connect功能将每个新连接放入
Lwt\u mvar


有一个循环的
Lwt.async
线程。在每次迭代中,从mvar获取两个连接,并在它们之间生成一个游戏。

谢谢。Lwt_mvar使代码不那么冗长,而且非常方便。