2016-03-29 9 views
0

エリクシルでソケットを多重化する方法は?私はコアバンキングに接続する必要がありますが、ただ1つのtcp接続しか受け入れず、私のアプリケーションは多くの同時接続を受けました。助言がありますか?エリクシールで多重化されたソケット

+0

スピンソケットあたり1つのプロセスアップ。 –

答えて

4

私はGenServerでソケット処理全体を包み込み、ゲートウェイとして機能し、一度に1つのメッセージしか処理しません。例:

​​

APIクライアントに多くのコマンドを送信できますが、一度に1つのメッセージしか処理しません。たとえば、同時に10個のメッセージを送信した場合、これらのメッセージはすべて1つのTCP接続を使用して順次送信されます。

Client.start_link 

tasks = for x <- 1..10 do 
    Task.async fn -> 
    IO.puts Client.command("Hello world #{x}!") 
    end 
end 

for task <- tasks do 
    Task.await(task) 
end 

あなたはsocatを持つ単純なエコーサーバを作成することにより、ローカルでこれをテストすることができます

socat -v tcp-l:9999,reuseaddr,fork exec:cat 
+2

"ソケットごとに1つのプロセスをスピンアップします。"しかし、あなたはそれよりもはるかに良いと言った:-P –

+0

それは素晴らしい答えですが、あなたの例によると、10の要求を送信する場合、次々に送信する必要が同じであり、必ずしも同じ順序ではなく、つまり、3つの糊付けされた回答を受け取ることができます。最初の2バイトのメッセージをセグメント化する必要があります。これは応答の長さIを示します。 –

+0

これで、ソケットから同時に読み取り/書き込みできるようにしたいのですか? TCPはこれを設計上許容しているので、一般的には問題ありません。リクエストとレスポンスはどのように一致していますか?応答が順序どおりでない場合は、一致させる方法が必要です。これらの詳細がなければ、良い答えを与えるのは難しいです。 –

関連する問題