問題タブ [cowboy]
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.
erlang - OTPyになるには、静的テキストファイルをどこに置く必要がありますか?
カウボーイを使用してサーバーを構築していますが、提供したい静的HTMLページがいくつかあります。そのようなものを置くためのOTPフレンドリーな場所はありますか?この種のものを探す場所を鉄筋に伝える確立された方法はありますか?
erlang - Cowboy で websocket 経由でデータを非同期に送信するにはどうすればよいですか?
Cowboy Websocket サーバーがあり、Websocket 経由で何かを送信するgen_eventハンドラーを登録したいと考えています。また、通常の同期リクエストにwebsocket_handle/3
. cowboy_http_websocket_handler.erlには何も明らかではなく、cowboy_http_websocket:websocket_send/3はエクスポートされません。開いているソケットを介して何かを送信する簡単な方法がありませんか?
ssl - SSL 応答が 2 つのコールバックに分割される
私はクライアント サーバー アプリケーションを開発しており、websocket で実行するためのサポートを追加する任務を負っています。サーバー側でCowboyを使用しており、テストのためにErlang Websocketクライアントに取り組んでいます。
物事は次のようになるはずです:
- クライアントはソケット接続を開き、http ハンドシェイクを開始します
- サーバーは http ハンドシェイクを完了します
- クライアントはサーバーにメッセージを送信し、サーバーは応答を送信します
- クライアントが応答を処理する
- 3と4を繰り返す
クライアントモジュールは実装します
これは、データが表示されたときに、基礎となるトランスポート (gen_tcp または ssl) によって呼び出されます。
を使用するようにクライアントとサーバーを構成すると、すべて正常に動作しますgen_tcp
。代わりに を使用するssl
と、websocket ハンドシェイクが完了しますが、ステップ 4 でhandle_info
、サーバーから返されたデータの最初のバイトのみを含む へのコールバックを取得しています。後続のコールバックには、残りの応答が含まれます。
gen_tcp をスワップインした同じコードが正常に動作し、ssl
(websocket やカウボーイではなく) を使用して構築された他の 2 つのトランスポートが同様にこの動作を示さないことを考えると、この動作に本当に混乱しています。
データがこのように分割される原因を誰かが示唆できますか? 必要がなければ、この処理を記述する必要はありません。
更新:キックのために、クライアントを修正して、2 つのコールバックが発生するのを待機し、解析を試みる前に両方からのデータを連結するようにしました。これで問題は解決しますが、まだ困惑しています。
ただし、いくつかのことに気付きました。
- 2 つのコールバックの最初のセットには、常に正確に 1 バイトが含まれます。
- そのバイトは常に 130 (0x82) です
それが関連しているかどうかはわかりません。
erlang - Error reports in Erlang
I've taken the cowboy example code and brooken it.
The code for the default request handler looked like this:
its straight forward, but I wanted to make return files so I changed it to:
The try-catch thing should handle the fact that there might not be a file, but it does not. Why is that?
When I try to fetch a file that is not there I get a large error report in the console, can anyone tell me why?
html - ErlangカウボーイでHTMLファイルを提供していますが、テキストとして表示されます
動的に生成されたhtmlページをErlangCowboyで提供しようとしていますが、Firefox14.0.1ではテキストとして表示されます。
ブラウザページのソースからコピーされたdoctypeタグと初期ヘッダータグは次のとおりです。
Doctypeを省略した場合、意図したとおりに表示されます。
Bootstrap Scaffolding(http://twitter.github.com/bootstrap/scaffolding.html)は、htmldoctypeを呼び出します。
これが私のhtmlまたは私のカウボーイ構成の問題であるかどうかはわかりません。
_app.erlのディスパッチの関連部分は次のとおりです。
誰かが私のやり方の誤りを見せてくれませんか?
どうもありがとう、
LRP
erlang - カウボーイサーバーでWebSocket接続を手動で閉じる方法は?
カウボーイサーバーで(サーバー側から)手動でWebSocket接続を閉じるにはどうすればよいですか?init / 3のcallback-moduleでログイン/パスワードを確認し、「間違った」ユーザーをリターンコードでキックします。これを行うための最良の方法は何ですか?
erlang - Websocket 接続を処理するカウボーイ プロセスとのリンク (カウボーイ、アーラン)
カウボーイとsockjsの両方を使用するerlangアプリを開発していますが、websocket接続を処理するカウボーイプロセスとリンクすることは可能でしょうか?
現在、gen_server の動作を伴うプロセスは、各 websocet 接続に関連付けられています。このようなプロセスは Conn インスタンスを init に格納し、クライアントが接続を閉じると、このプロセスは websocket ハンドラーから終了します。gen_server プロセスが終了すると、クリーンアップを行う gen_server の terminate() から Conn:close が呼び出されます。それは機能しますが、trap_exit が有効になっていても終了関数が呼び出されない場合がいくつかあるため、このソリューションは好きではありません。したがって、リンクが可能であれば、より簡単なソリューションになります。
erlang - 多くのカウボーイの例での 1 対 1 のスーパーバイザーの目的は何ですか?
Cowboy github で提供されている例や、私がオンラインで見つけた他の例のいくつかには、何もしていないように見える 1 対 1 のスーパーバイザーがあります。「本当のスーパーバイザーは何もしないように」というコメントが含まれている例を見たとさえ思います。
非常に多くのカウボーイの例の一部と思われるスーパーバイザー モジュールの目的は何ですか?
echo_get の例から:
http - 高いクライアント ポーリング レートに対する Web サーバーの耐性: Cowboy 対 Yaws Web サーバー
私はリアルタイム通知システムを構築しています。これは Web アプリケーションの一部ですが、イベントは発生したらすぐに表示される必要があります。長時間のポーリングはオプションではありませんでした。イベントが利用できない場合に Web サーバーが接続を保持するとコストがかかるため、短時間のポーリングを使用する必要がありました。
各クライアントは、たとえば 2 秒ごとに Web サーバーにアクセスします (これはかなり高いレートです)。イベントが利用可能になると、JSON として JavaScript クライアントに送信されます。現在、これには、多数の短期間の接続を処理するためのサーバーのセットアップが必要です。Yaws Web サーバーを使用して、そのようなシステムの 1 つを実装しました。ただし、Yaws は他にも多くのサービスを開始するため、接続が 30,000 を超えると負荷が高くなり、接続が拒否または中止され始めます (おそらく、Yaws が実行されているのと同じ Erlang VM でいくつかの ETS テーブルを実行しているためです [これらを分離するために が必要rpc:call/4
になる場合があります。オペレーティング システム固有の調整が必要であることは承知しており、それらは既に完了しています。
複数の Yaws インスタンスを簡単にクラスター化できる場合、これは問題になりません。Yaws では、いくつかの appmod を使用しており、RESTful な作業を行っています。Cowboy の Web サーバーが、ここでの機能を少し強化するのではないかと考えていました。カウボーイは使ったことがありませんが、ミスルティンは使ったことがあります。Cowboy を見ると、これは本格的な OTP アプリケーションであり、クラスタ化が容易で、軽量であるため、システム全体で処理できるクライアントの数が増える可能性があります。ストレージは Mnesia 上にあり、簡単に配布してノードを追加することができます (おそらくレプリケーションによって)。そのため、すべての Mnesia インスタンスの前に Cowboy インスタンスが存在します。
私の質問は次のとおりです。
Yaws から Cowboy に切り替えた場合、パフォーマンスが大幅に向上する可能性があるという私の推測は正しいですか?
Appmods
Yaws には、#arg{}
レコードを介したクリーンな API があります。カウボーイには、これら 2 つのものに相当するものがありますか (図を示してください)?Cowboy
ファイルのアップロードを処理できますか? もしそうなら、頻繁にファイルをアップロードする場合、どちらのサーバー (Yaws または Cowboy) を使用するのが良いと思いますか? Cowboy でファイルのアップロードがどのように行われるかを説明します。複数の Yaws インスタンスを同じマシンで実行することができます。サーバー (物理ボックス) ごとに多くの Yaws インスタンスを作成し、クライアントの負荷をこれらに分散させることは役立つと思いますか? これを行うために何を知る必要がありますか?
yaws.conf
パラメータを設定するmax_connections = nolimit
と、カウボーイで同じものをどのように指定しますか?
今、私はカウボーイの著者とのインタビューをたどり、カウボーイがヨーズよりも軽量である理由について議論しています. 彼はこう言った
最大の違いは、リストの代わりにバイナリを使用することです。ジェネリック アクセプター プールは別のものです。他にも多くの小さな違いを挙げることができますが、これらは最も興味深いものではないと思います.
Cowboy はリスナー プール ライブラリRanchを使用しているため、どういうわけか、より多くの接続を処理する能力が高くなり、リストではなくバイナリを使用することになります。
同じインタビューからの別の引用:
接続ごとに 2 つではなく 1 つのプロセスを使用し、リストの代わりにバイナリを使用するため、ユーザーの介入なしでは、他のプロジェクトよりもはるかに少ないメモリを使用することになります。カウボーイも怠け者で、必要な場合以外は何もしません。そのため、ユーザーが関数の呼び出しを開始するまで、メモリはあまりありません。
yaws はこのケースをどのように処理するのだろうか。どういうわけか、問題のドメインには軽量の HTTP 処理が必要です。Mochiweb、Misultin、Cowboy などと比較して、Yaws がより多くのメモリを消費することは事実です。私の最大の懸念は、Yaws が最も優れた/最もクリーンな API を備えていることです。これにより、Erlang レコードとして必要なものすべてを含むものにアクセス#arg{}
できるようになり、外部のものを抽出するための多数の機能を備えた他のものよりも自分でそれらを取得できるようになります。ドキュメンテーションでさえ: Yaws のドキュメンテーションは非常に優れており、簡単です。GET
おそらく、ファイルのアップロードや単純なPOST
リクエスト処理などについて、Cowboy コードをもっと調べる必要があります。
そうでなければ、私が以前に尋ねた質問は差し迫った懸念として残っています. ヨーズはかなり良いですが、この高速で軽量で短期間の高率の世論調査の状況ではやり過ぎのようです。どう思いますか?