2016-07-25 9 views
-1

im Javaで生成された情報を表示するためにJavaScriptを使用しています。 Imは10,000のデータを話します。それらのすべてはJavaで生成され、ランダム値を使用してimのテストを行います。まあ、私はJavaScriptのページでこの10,000の値を見たいと思っています。サーバのJava&Javascriptクライアントを使用したApache Thriftの配列

私はすでに2つの倍を共有するシンプルなサーバーJavaとクライアントのJavascriptを持っています。

これは2倍のためのスリフトファイルです:これは私のJavaScriptクライアント

function calc() { 
var transport = new Thrift.Transport("/service"); 
var protocol = new Thrift.Protocol(transport); 
var client = new testClient(protocol); 

var workbench = Math.random()*1000; 
    try { 
     result = client.number(workbench); 
     $('#result').val(result); 
     $('#result').css('color', 'black'); 
     document.getElementById("demo").innerHTML = result; 
    } catch(ouch){ 
     $('#result').val(ouch.why); 
     $('#result').css('color', 'red'); 
    } 
} 

イムだけの範囲を取得するために、ランダムに送信するコードです

namespace java test_thrift 
service test{ 
    double number(1:double n1, 2:double n2) 
} 

戻る。例:1等の3から9までの戻り値は、2リターン9〜15値、

とJavaで私はtestHandlerクラスしている:まあ、これは1つの値を

public double number(double n1, double n2) throws TException { 
    //System.out.println(n1 + " - " + n2); 
    Random rnd = new Random(); 
    n1 = rnd.nextDouble() * 10 + 1; 
    n2 = rnd.nextDouble() * 15 + 10; 
    return n2; 
} 

を返します。そして、私はJavascriptページですべてを見たいと思っています。しかし、10,000要素で。これどうやってするの?

また、私は、最終的な構造体を共有することを追加したいが、このようなものです:

dis[10000][3]={ 
    ABC,12.5,13.5, 
    ACD,14.4,11.5, 
    .....ETC......} 

イムは、これを見つけた

を立ち往生、私はそれが仕事を取得する方法を知らない:/

namespace java test_thrift 

typedef list<double> Vector 

struct test 
{ 
    1:i32 rows, 
    2:i32 cols, 
    3:list<Vector> data, 
} 
+0

に役立つことを願っています:何pair' 'と'リストを '使用について'struct pair {1:double one、2:double two} 'ですか?これにより、1回の呼び出しで必要なだけ多くのデータを渡すことができます。サーバーのIDLをチェーニングするのが有効な選択肢でない場合は、10000のコールを実行する必要があります(パフォーマンスが低下します) – JensG

+0

ちょうど1回の呼び出しですべての情報を渡したいと思います。しかし、私は "リスト"の仕組みを知らない。私はそれを使用したことはありません。あなたはいくつかの例を知っていますか? –

答えて

0

私はそれを修正することができました。ここにreequestとJavaサーバーを作るClient JavasCriptがあり、10000 x 18の行列を返します。

スリフトファイル:

function calc() { 
var transport = new Thrift.Transport("/service"); 
var protocol = new Thrift.Protocol(transport); 
var client = new pruebaClient(protocol); 


var workbench = Math.random()*1000; 
var div = document.getElementById('deltat'); 


    try { 

     result = client.number(1); 
     div.innerHTML = div.innerHTML + '\nReady'; 

    } catch(ouch){ 

     $('#result').val("ERROR"); 
     $('#result').css('color', 'red'); 
    } 
} 

そして結果にyが[10000] [18]の答えを持っています。

struct Cell { 
    1: string did 
    2: double l_x 
    3: double l_y 
    4: double l_z 
    5: double m_x 
    6: double m_y 
    7: double m_z 
    8: double a_x 
    9: double a_y 
    10: double a_z 
    11: double g_x 
    12: double g_y 
    13: double g_z 
    14: string d_t 
    15: double tp 
    16: double r_q 
    17: string o_m 
    18: double b_v 
} 

service test{ 
    list<Cell> number(1 : i16 req) 
} 

は次にJavaScriptで私が唯一のリクエストを送信test_thrift

名前空間のjava

for (var i = result.length - 1; i >= 0; i--) { 
     //div.innerHTML = div.innerHTML + '\n' + result[i]; 
     div.insertAdjacentHTML('beforeend', '\n'+result[i].did+' '+result[i].l_x+' '+result[i].l_y+' '+result[i].l_z+' '+result[i].m_x+' '+result[i].m_y+' '+result[i].m_z+' '+result[i].a_x+' '+result[i].a_y+' '+result[i].a_z+' '+result[i].g_x+' '+result[i].g_y+' '+result[i].g_z+' '+result[i].d_t+' '+result[i].tp+' '+result[i].r_q+' '+result[i].o_m+' '+result[i].b_v); 
    }; 
    } 
このように印刷します。

最後に私のJava Serverのハンドラは、このようなものです:

public class TestHandler implements test.Iface { 
    public Random rnd = new Random(); 
    public static List<Cell> p = new ArrayList<Cell>(); 

    public void test() { 
    for (int i = 0; i < 10000; i++) { 
     Cell a = new Cell(); 
     a.did = "SomeString"; 
     a.l_x = rnd.nextDouble()*10+1; 
     a.l_y = rnd.nextDouble()*10+1; 
     a.l_z = 0.0; 
     a.m_x = 0.0; 
     a.m_y = 0.0; 
     a.m_z = 0.0; 
     a.a_x = 0.0; 
     a.a_y = 0.0; 
     a.a_z = 0.0; 
     a.g_x = 0.0; 
     a.g_y = 0.0; 
     a.g_z = 0.0; 
     a.d_t = "String here"; 
     a.tp = 0.0; 
     a.r_q = 0.0; 
     a.o_m = "A"; 
     a.b_v = 0.0; 
     p.add(a); 
    } 
} 
@Override 
public List<Cell> number(short req) throws TException { 
    test(); 
    return ips.ReminderBeep.list_d; 
} 

私はこれは私が右の問題を理解して考えると、誰か

+0

あなたの答えが自分の質問によく一致していないという事実に気づいていますか? – JensG

+0

なぜですか?私は最初に、この形式のような行列を尋ねると言った: 'dis [10000] [3]'。それを読んでいないのですか?私はちょうど "18"の "3"を変更します。どうしたの?。あなたはJavascriptからJavaにデータを送ってきます。私はそれとは逆のことを言いました。 –

1

使用このIDLファイル

namespace java test_thrift 

struct MyPair { 
    1: double one 
    2: double two 
} 

service test{ 
    list<double> number(1 : list<MyPair> data) 
} 

関数はそのようにのように呼ばれている:

var list = []; 
for(var i = 0; i < 10000; ++i) { 
    list.push({ 
     one : Math.random()*1000, 
     two : Math.random()*1000 
    }); 
} 
result = client.number(list); 

結果はもちろん、特定のサーバー側はそれに応じて実施され、返された値のリストでなければなりません。

+0

サーバを再利用してハンドラを変更しても問題ありませんか?私はちょうどリストのサイズを印刷しようとしたが、私は傾ける。 Javascriptのファイルは常にキャッチに移動します。申し訳ありませんが、この迷惑な、私は古物商では新しいですが、本当にあなたの助けに感謝します。 –

関連する問題