問題タブ [network-conduit]
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.
haskell - Haskell に欠落しているデータ コンストラクター HostAny
Conduit Network を試していますが、データ コンストラクターが見つからないため、このコードをコンパイルできません: HostAny
コンジット-エクストラがインストールされているので、なぜそれが見つからないのか非常に困惑していますか?
GHCエラーは次のとおりです。
pez@devbox:~/dev$ runhaskell server.hs
haskell - コンジットを実行した後に値を取得するにはどうすればよいですか?
さらにパイプラインを開始する前に、クライアントとの間で少し行ったり来たりして、Client オブジェクトまたはその名前文字列を取得する必要があります。
しかし、私は appSink に戻り値を持たせることができないようです。
どうすればいいですか?
アップデート
これが私が最終的に得た解決策です:
http - Network.HTTP.Conduit の Haskell simpleHTTP が get リクエストで遅い
私のhaskellコードでは、次のようにインポートNetwork.HTTP.Conduit
しました
私のメイン関数では、次をGET
使用して簡単なリクエストを行いますsimpleHTTP
100 件の API リクエストを完了するのに 6 分 42 秒かかりました
一方、ruby
別の方法では、100 回の API 呼び出しに 153 秒しかかかりません。Net::HTTP.get(URI.parse("https://github.com/trending?l=ruby"))
Haskell コードで何か間違ったことをしていますか? の高性能で効率的な代替手段はsimpleHTTP
何ですか?
multithreading - 複数のソースをブロックせずにコンジットにデータを取得させる方法はありますか?
私はサーバーを作成していますが、要件の 1 つは、クライアントから直接要求されたデータを持たずにクライアントにデータをプッシュできる必要があるということです。コンジットを使用していますが、これはコンジットの能力を超えているように感じます。私が遭遇した問題は、ソケットに利用可能なデータがあるかどうかを判断する方法がないように見え、データが利用可能になるまで await が実行をブロックすることです。次の機能があるとしましょう
次に、コンジットを Conduit.Network ライブラリのソースとシンクに接続します。
ここで、コンジットの外部からデータのソースを導入し、そのデータをコンジットに組み込みたいと考えています。たとえば、これがチャット サーバーの場合、外部データは他のクライアントから送信されたメッセージになります。問題は、この外部データをどこに導入しようとしても、await の呼び出しによってブロックされることです。基本的に、次のようなコードになります。
より多くの外部データが処理される唯一の方法は、上流のコンポーネントが何かを生成する場合ですが、上流はクライアントからデータを取得する場合にのみ生成されます。これはまさに私が避けようとしているものです。これを解決するために複数のスレッドと TChannel を使用しようとしましたが、appSource と appSink を同じスレッドで使用する必要があるようです。そうしないと、recv から無効なファイル記述子の例外が発生します (これは理にかなっています)。
ただし、ソケットのソースとシンクが同じスレッドで実行されている場合、await がブロックされているという問題が再び発生し、ソケットからデータが利用可能かどうかを確認する方法がありません。この時点で、コンジットで壁にぶつかったようです。
しかし、私はコンジットの使用を本当に楽しんでおり、引き続き使用したいと考えています。私の質問は次のとおりです。コンジットで達成しようとしていることを行う方法はありますか?