問題タブ [http-kit]

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.

0 投票する
2 に答える
1445 参照

http - clojure を使用した Heroku での HTTP ストリーミング / チャンク応答

チャンクされた HTTP 応答を使用してクライアントにデータをストリーミングする clojure Web アプリを作成しています。を使用してローカルで実行するとforemanうまく動作しますが、Heroku にデプロイすると正しく動作しません。

この動作を示す最小限の例は、私の github here にあります。フロントエンド ( resources/index.html) は AJAX GET 要求を実行し、応答チャンクが到着すると出力します。サーバーは http-kit を使用して、接続されたクライアントに毎秒新しいチャンクを送信します。設計上、HTTP 要求は決して完了しません。

同じコードが Heroku にデプロイされると、最初のチャンクが送信された直後に HTTP 接続がサーバーによって閉じられます。この切断が発生する原因となっているのは、Heroku のルーティング メッシュのようです。

これは、curl を使用して GET リクエストを実行することでも確認できます。

なぜこれが起こっているのか誰にも示唆できますか?HTTP ストリーミングは、Heroku の Cedar スタックでサポートされるはずです。を使用してコードが正しく実行されるという事実はforeman、Heroku のルーティング メッシュの何かが壊れていることを示唆しています。

失敗したプロジェクトのライブ デモ: http://arcane-headland-2284.herokuapp.com/

0 投票する
1 に答える
651 参照

clojure - clojure の http-kit を使用した同期 POST

約束を返す同期投稿を行うために、clojure で http-kit クライアント ライブラリを使用しようとしています。実際の投稿を行うスレッドの数を制限する方法はありますか?

組み込みのスレッド プールを使用して見つけたすべての例は、呼び出された下位レベルのプリミティブ関数を使用していますrequestが、それらはすべて http/get 用でした。

ありがとう

0 投票する
1 に答える
859 参照

clojure - Clojure のスケーラブルなチャット サーバー。プレゼンスとメッセージ到着の b/w 再接続に関する問題

Clojure でスケーラブルなチャット サーバーを構築しようとしています。http-kit、compojure、および redis pub/sub を使用して、異なるノード間で通信しています (ファンアウト アプローチ)。サーバーは、長いポーリングへのフォールバックを使用して、クライアントとサーバー間の接続に websocket を使用します。1 人のユーザーは、ブラウザのタブごとに 1 つの接続でチャットするために複数の接続を持つことができ、メッセージはすべての接続に配信される必要があります。

基本的に、ユーザーが接続すると、ランダムな uuid を持つアトムにチャネルを保存します。

メッセージは Websocket とロング ポーリング チャネルの両方の共通ルートに POST されます。メッセージ構造は次のようになります。

サーバーは、:from および :to ユーザー ID のアトム内のすべてのチャネルを見つけ、それぞれのユーザーの接続されたチャネルにメッセージを送信します。また、接続されたノードが格納されているチャネルを探す redis サーバーを介してメッセージを発行します。自分のアトムを作成し、それぞれのユーザーにメッセージを配信します。

したがって、私が直面している問題は、プレゼンスを適切に実装する方法です。基本的にhttp-kitは、チャネルが切断されたときにステータスを送信します。ステータスは「server-close」または「client-close」にすることができますが、サーバーの切断を処理できます(クライアントは自動的に再接続します)が、切断時に問題が発生していますたとえば、クライアント側から発生します。ユーザーは別のページに移動し、数秒後に接続します。クライアントが切断されたときに、ユーザーがオフラインになったことをどのように判断しますか? また、ロング ポーリング モードでのメッセージ到着の双方向再接続についても懸念しています (ロング ポーリング タイムアウトは 30 秒です)。

また、上記のアーキテクチャに適したプレゼンス メカニズムを提案してください。ありがとう。

さらに情報が必要な場合はコメントしてください。ありがとう

編集#1:

チャット サーバーにプレゼンスを実装するための優れたチュートリアル/資料をお勧めできますか?

私の現在の解決策 - >現在、特定のユーザーIDの接続チャネルのグローバルカウントと最後に接続されたタイムスタンプを維持しており、ユーザーが切断するとカウントが減少し、ユーザーが持っているかどうかを確認する10秒間のタイムアウトが実装されています再接続された場合 (つまり、最後に接続されたスタンプは 10 秒前で、カウントはまだゼロです)、そうでない場合、ユーザーはオフラインになったと言われます。この解決策をお勧めしますか。また、http-kit で timer/scheduled-task を使用していることに注意してください。これらのタイムアウトはパフォーマンスに大きな影響を与えますか?

0 投票する
1 に答える
861 参照

http - core.async チャネルで http-kit ロング ポーリングを使用する

プロセスが終了したときに結果を含む core.async チャネルを返す長時間実行プロセスがあります。

ここで、HTTP-kit を使用したロング ポーリングを使用してその結果を返したいと思います。残念ながら、私はそうする正しい方法が何であるかについて少し混乱しています。

現在、処理呼び出しを開始し、完了時に結果を送信するハンドラー (ルートに接続) があります。

動作しますが、これが正しい方法かどうかはわかりません。

編集はブロックされているため<!!、現在、ゴーループで非ブロックバリアントを試しています