2012-08-05 15 views
7

Piszę serwer Java oparty na Apache Thrift, który otrzyma dane z klienta JavaScript. Ukończyłem serwer Java, ale problem polega na tym, że mogę uzyskać działający przykład dla klienta Javascript (nie udało mi się znaleźć na to dobrego przykładu). przykłady w dokumentacji kompilacji nie są zbyt pomocne. Mój aktualny klient Javascript jest poniżej:Apache Thrift Java-Javascript komunikacja

function testServer() { 
    try { 
     var transport = new Thrift.Transport("http://127.0.0.1:9090"); 
     var protocol = new Thrift.Protocol(transport); 
     var client = new JavaEventClient(protocol); 

     var alive = client.isServerAlive(); 
    } catch(e) { 
    } 
} 

testServer(); 

Ale kod nie działa - ponieważ serwer Java zgłasza błąd "Brak pamięci". Nie wiem, czy błąd wynika z kodu klienta, czy z Apache Thrift.

Co robię źle?

+0

Czy próbowałeś zwiększyć pamięć JVM? – kgautron

+0

Tak, to nie pomogło. – John

+0

Thrift w Javie złośliwie wyrzuci OOM na fałszywe dane wejściowe, wydaje się, że klient JS wysyła coś tam nie tak. Przypuszczam, że twoja definicja protokołu na serwerze ma metodę "isServerAlive()"? – favoretti

Odpowiedz

0

Wygląda na problem z komunikacją. Może używasz innego protokołu lub transportu na serwerze i kliencie. lub błąd w implementacji tych protokołów. // Jako przykład znalazłem błąd z utf8 znaków w serializacji oszczędzania javascript.

Wygląda na https://github.com/imysak/using-thrift (Mój przyjaciel i ja napisaliśmy ten prosty przykład komunikacji Java-Node.js poprzez oszczędności).

Mam nadzieję, że możesz użyć czegoś z naszej implementacji JS.

0

Błąd występuje, gdy serwer używa TBinaryProtocol, ale próbujesz uzyskać do niego dostęp w inny sposób, np. za pomocą przeglądarki (która mówi w HTTP). IMO to błąd. Zamiast tego powinien pojawić się miły komunikat o błędzie.

Pliki, jak sprawić, by serwer Thrift Java działał z klientem Thrift Javascript, są rozproszone w całym źródle. Zaintrygowałem je tutaj: https://github.com/LukeOwncloud/ThriftJavaJavascriptDemo