問題タブ [lwt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ocaml - Lwt_term を使用したプログラムのコンパイル
OCaml に次のコードがあります。
を使用してコンパイルしようとすると
次のエラーが表示されます。
上記の問題とは関係ないことはわかっていますが、utop から Lwt を開くことはできますが、Lwt_term を開くことはできません。私は何を間違っていますか?
ocaml - Lwt_main.run() の適切な使用
使用中にエラーが発生しましたLwt_main.run()
。基本的に、2 つのタイプの無限ループがunit -> 'a Lwt.t = <fun>
あり、両方のループを開始するとエラーが発生します。1 つのループがライター ループで、もう 1 つのループがリーダー ループであるというコンテキストでこれらを使用しています。基本的に、リーダーで使用するよりも頻繁にライターでデータを更新する必要があります。私が受け取ったエラーは、以下のコードで説明できます。
エラーなしで次のように Lwt_main.run ステートメントを実行できますが、この解決策は、警告を修正するのではなく、ワイルドカードで警告をマスクしているようです。
Lwt_main.run()
ワイルドカード文字でエラーをマスクする代わりにエラーを修正できるように、このコンテキストでの適切な使用法は何ですか?
cassandra - Cassandra LWT 読み取り
LWT の挿入は常に SERIAL 整合性レベルで行われると理解しています。真の場合、LWT として挿入された行の読み取りは、一貫性レベル ANY で安全に読み取れることを意味しますか?
言い換えれば、整合性レベルに関係なく、LWT 挿入は完全に整合性があり、後続の読み取りも完全に整合性があると思いますか?
ocaml - Ocaml Lwt - マルチプレイヤー ゲームのいくつかの実装
tic-tac-toe サーバー (telnet 経由) の簡単な実装を書きます。タスク - プレーヤーはサーバーに接続し、START を送信した後、サーバーは START を入力したパートナーを探し、ゲームが開始されます。コードの一部:
私は Ocaml にまったく慣れていません (特に Lwt)。では、プレイヤーの START を他のプレイヤーを探すようにするにはどうすればよいか、アドバイスをいただけないでしょうか。プレーヤーの状態を常にチェックする反復、2 番目のプレーヤーが START と入力するのを待つ高レベル関数 (それが可能かどうかはわかりません)、Lwt ウェイカー、Lwt ブロードキャスト、別の a' Lwt の作成 (Sleep until) を含むリストを使用する必要があります。 Lwt.tの選手が2人か何か?それを最も賢い方法で実装する方法がわかりません。ありがとうございます。
concurrency - Ocaml Lwl_mvar.take がスレッドをブロックしない
私はまだ簡単なゲームサーバーを書いています。hereからのアドバイスにより、少なくとも2人のプレーヤーが含まれていないときにスレッドをブロックすることを期待して、mvar サポートを実装しました。しかし、そこにデータを入れるまで待ちません。それは常に寝ている Lwt.t を返します。まず最初に、ここで接続を受け入れ、プレイヤーに START に入ってパートナーを探し始めるように勧めます。
問題ないようですが、Lwt_mvar.take waiting_players を呼び出すと、前に何も置かれておらず、スレッドがブロックされていなくても、常にいくつかの値が返されます。このような (私にとって) 奇妙な動作は、次の例でよくわかります。
「ブロッキング」がまさにそのような眠っているオブジェクトを返すことを意味する場合は、教えてください. そして、「準備ができている」オブジェクトのみを返すループを作成する方法が最善の方法ですか? Lwt.is_sleeping を使用するのは良い考えですか? どうもありがとう。
sockets - Lwt チャネルのリダイレクト
Unix ソケットで実行されている ssh サービスがあり、UNIX ソケットのチャネルに向けたいローカル TCP サーバーがあります。
基本的に私がするとき:
次に、ローカルの TCP サーバーが要求を受け取り、それを Unix ソケットにパイプします。TCP クライアント (この場合は ssh) が Unix ソケットから応答を受け取ります。関連コード:
そして、この種の作品。コマンドラインでsshを呼び出すと「スタック」しますが、反対側のsshヘッダーが正しいため、データを取得していることはわかっていますSSH-2.0-OpenSSH_6.7
. また、最初の ssh ハンドシェイクのより多くの部分を出力するように側に指示します。つまり、次の出力が表示されます。
など、正しいようです。ハングの理由は私が使用しているためだと考えたLwt_io.read_line
ので、代わりにこれを試しました:
これは実際にはさらに悪化し、最初のハンドシェイクさえ出力しませんでした。専用の ... 関数も試しましたが、{write,read}_into
成功は限られていました。strace/dtruce で実行すると、次のような最終結果が表示されます。
6.9 はローカル マシンの ssh で、6.7 は Unix ソケットの背後にあるリモート マシンです。私にとって奇妙に思えることの 1 つは、 がどのように\r
ドロップされ、これにより読み取り/書き込みカウントが 1 変化するかということです。これが決定的な違いになるかどうかはわかりません。
理想的には、この読み取り可能なチャネル (TCP ソケット) で利用可能なデータがあるときはいつでも、書き込み可能なチャネル (Unix ソケット) に直接書き込む、またはその逆の Lwt からのある種の抽象化が必要です。