問題タブ [gen-server]
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.
ssl - Erlang Apple プッシュ通知が切断前に応答エラーを取得しない
現在、プッシュ通知モジュールを少しテストしています。デバイストークンが無効な場合、切断されます...
Apple プッシュ通知開発者ドキュメントによると、 Appleプッシュ サーバーが切断される直前にエラー応答パケットを取得する必要があります...
問題は、切断されますが、その直前にソケットで何も得られず、不正な形式のプッシュが原因でプッシュが失敗したか (バグを修正できるため)、または無効なデバイス トークンが原因であるかを知る必要があることです (そのため、データベースから削除できます)。
これが私のコードです:
ペイロードと deviceToken の両方が正しい場合、うまく機能します。deviceToken が無効な場合は、切断されるだけです。
誰でも問題を見つけることができますか? 4時間の検索の後、明らかにできないことがわかっただけです!
エラー応答表は次のとおりです。
erlang - otp gen_serverの情報、呼び出し、キャストメッセージキューに異なる優先順位がありますか?
call
コードを書くとき、私はどのタイプのメッセージを使うべきか、どのタイプのメッセージを使うべきinfo
かを自問します。
info, cast, call
この質問の下に、メッセージ間に優先順位の違いがあるかどうかというもう1つの長年の疑問がありますか?これらの3つのタイプのメッセージが同じキューを共有するかどうか。
erlang - gen_serverメソッドが2つのクライアントによって同時に呼び出されるとどうなりますか?
クライアントプロセスがデータを送信するときにデータをファイルに記録するgen_serverモジュールがあります。2つのクライアントプロセスがこのモジュールに同時にデータを送信するとどうなりますか?ファイル操作は互いに競合しますか?erlangのドキュメントはここではイライラするほど不明確です。
erlang - Erlangcode_changeとローカル関数呼び出し
モジュール内のローカル関数を呼び出して、コードの変更後に最新バージョンのコードが使用されるようにする方法がわかりません。次の例を参照してください。
変更される機能はですadd/1
。最新バージョンの関数を使用するには、add/1
(17行目)の呼び出しが完全修飾関数呼び出し
{Pid, Z} -> Pid ! ?MODULE:add(Z)
である必要があります。私がそれを試してみると、私はこれを手に入れます:
22行目はに変更されましたN + 2
22行目が再びに変更されましたN + 3
なぜこのエラーが発生するのですか?
tcp - TCP ホストへの自動再接続
TLDR: 失敗することがある TCP サーバーに自動的に再接続するための再利用可能なコードはありますか?
私はサーバー アプリケーションを作成しています。hal
これは、他のサーバーへの TCP 接続も開きますxbmc
。私は当初、xbmc
失敗したときにxbmc
erlang プロセスが停止し、その後スーパーバイザーによって再起動されるように書いていました。
どうやら、これは erlang で永続的な TCP 接続を行うには良い方法ではありません。まず第一に、これは実際には機能しません。xbmc
失敗すると、プロセスの再起動が速すぎて、スーパーバイザーがプログラム全体をシャットダウンしてしまいhal
ます。第二に、私はこれにスーパーバイザーを使用することは想定されていないようです: Erlang Supervisor Strategy For Restarting Connections to Downed Hosts (私が読んだように、このリンクされた質問は「スーパーバイザーはこれを解決しますか?」と答えるだけであり、私の質問の複製ではありません。 )
これはかなり一般的な使用例のように聞こえると思います。ホストがときどきダウンする場合でも、TCP 接続を可能な限り接続したままにします。これを達成するために使用する必要があるOTPまたはその他のライブラリコードはありますか?
erlang - gen_serverがボトルネックになる可能性はありますか?
私は現在erlangでソフトウェアを書いていますが、これは現在gen_serverの動作に基づいています。このgen_serverは、sslを使用してオンラインで別のサービスに接続し、関数に引数として渡された値を送信する関数(update / 1と呼びます)をエクスポートする必要があります。
現在、update/1は次のようになっています。
したがって、呼び出されると、次のように処理される?SERVERへの呼び出しがあります。
パケットがリモートサーバーに送信されると、ピアは接続を切断する必要があります。
これはシェルでのテストでは正常に機能しますが、mymod:update(Value)を1000回呼び出す必要があり、ssl:connect / 4がうまく機能しない(つまり、タイムアウトに達している)場合はどうなりますか?
この時点で、私のgen_serverには非常に大量の値があり、それらは1つずつしか処理できないため、update/1を使用して値が更新されてから1000*3000ミリ秒後に1000番目の更新が実行されます。
呼び出しの代わりにキャストを使用すると、同じ問題が発生します。どうすればこの問題を解決できますか?gen_server呼び出しではなく、通常の関数を使用する必要がありますか?
erlang - eshell からスーパーバイザを起動しようとすると、スーパーバイザがクラッシュしますか?
私はOTPに非常に慣れていません。スーパーバイザーの動作を理解するための簡単な例を作成しようとしています:
これが単純なインクリメントサーバーです
そして、このモジュールによって監視されるようにしたいと思います:
その後、次の手順を erlang シェルで実行しました。
この後、次に試しました(予想どおり、エラーが発生しました):
この後、私は期待していました-私のスーパーバイザーが再起動しinc_serv
ます。しかし、それはしませんでした:
何が起こったのか理解するのを手伝ってくれませんか? そして、再起動できるようにするには、スーパーバイザーをどのように書き直すべきですかinc_serv
ありがとう
erlang - Mochiwebに状態変数はありますか?
Mochiwebコードをざっと調べましたが、State変数の兆候は見つかりませんでした。
gen_serverのState変数に似たものがMochiwebに存在しますか?
状態に関連するサーバー側(セッションに関連しない)のデータをサーバーに少量保存する必要がありますが、そのためにETSやMnesiaを使用したくありません。
erlang - Erlang:gen_serverのinit()から結果を取得する方法
私のinit()関数は、UDPソケットを作成し、ソケット値を状態として返します。
関数start()でSocketを取得するにはどうすればよいですか?
erlang - Erlang gen_serverはどのようにして別のノードのgen_serverをstart_linkしますか?
私はErlangアプリケーションを持っていますが、リソースを少し消費しすぎて1つのノードにとどまることができません。私はgen_serversをあるプロセスから別のプロセスに移動させる過程にあります-これは比較的簡単であることがわかりました。私は最後のハードルにいます。これらのgen_serverを作成するファクトリプロセスを取得して、ローカルノードではなくリモートノードでそれらを生成します。start_linkのデフォルトの動作は明らかにローカルでのみ開始することですが、それを変更するオプションはありません。
私はそのソリューションを独創的にする必要があるように思われ、そこにいる誰かがすでにこのようなものを実装して成功したかどうかを確認したいと思いました。IOW、推奨される解決策は何ですか?
編集
私は呼び出しによってトリガーされる呼び出しのチェーンを見ています:
gen_server:start_link / 3:
gen:start / 5:
gen:do_spawn / 5:
proc_lib:start_link / 5:
これでようやく興味深い部分にたどり着きました。以下に一致するspawn_opt/4があります。
しかし、実際に私に役立つものがあります:
これが公開されていないのは気が遠くなるほどです。不注意なプログラマーが火星で実行されているerlangノード上のプロセスをgen_server:start_linkしようとして、30分間呼び出しをブロックするリスクがあることを認識していますが、確かにそれはプログラマーの見張りです。私は本当にOTPを変更したり、ある種のアドホックソリューションを書いたりすることに固執していますか?