2015-06-05 4 views
0

У меня есть следующий бережливости клиентский код в JavaScript:Javascript Бережливость клиент вешает

<script language="javascript" type="text/javascript" src="thrift.js" /> 
<script language="javascript" type="text/javascript" src="QuantSvc_types.js" /> 
<script language="javascript" type="text/javascript" src="QuantSvc.js" /> 
<script language="javascript" type="text/javascript"> 
function calc() { 
    var transport = new Thrift.Transport("http://localhost:9997/QuantSvc/"); 
    var protocol = new Thrift.Protocol(transport); 
    var client = new QuantSvcClient(protocol); 

    try { 
     result = client.ListAllVariables() 
    } catch(ouch) {  
     alert("An exception occurred!") 
    } 
} 
</script> 

который срабатывает, когда я нажимаю кнопку на моей странице HTML. Тогда, у меня есть следующий код на сторону сервера Scala, работающий на локальном хосте: 9997:

object Application extends App { 
    val handler = new QuantSvcHandler() 
    val processor = new QuantSvc.Processor(handler) 
    val serverTransport = new TServerSocket(9997) 
    val server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor))  
} 

Где функция ListAllVariables в QuantSvcHandler является (в основном функция скелета, просто пытаюсь получить вещи работать):

override def ListAllVariables(): util.List[Attributes] = 
{ 
    var input = scala.collection.mutable.Buffer[Attributes]() 

    input 
} 

Я поставил точку останова в первой строке ListAllVariables, а также несколько мест в процессоре QuantSvcHandler. Я запускаю сервер в отладке intellij IDEA, открываю HTML-страницу в Chrome и нажимаю кнопку (ту, которая вызывает функцию javascript calc()). Кнопка остается застрявшей, и я не вижу никакого ответа на сервере, точки останова не попадают.

Любые идеи о том, что я делаю неправильно?

ответ

1

Вы смешиваете HTTP-клиент с сервером сокета.

Хотя HTTP использует сокеты, транспорт Thrift HTTP несовместим с транспортом Thrift Sockets. Вам необходимо настроить тот же протокол/транспортный стек на обоих концах. Единственным исключением из этого правила является то, что на какой-то серверный транспорт неявно требуется дополнительный обрамленный транспортный уровень на стороне клиента.

Таким образом, решение заключается в использовании HTTP-сервера. В зависимости от используемой версии вам также может потребоваться переключиться на протокол JSON.

+0

Спасибо. Просто FYI относительно того, почему документация запутывает: на странице документации клиента javascript он говорит как предварительный вариант: «Это руководство зависит от существующего сервера Thrift. См. Учебник по Java или учебник node.js о том, как создавать и настройте один из этих серверов. ". Затем вы переходите по ссылке, посмотрите, как настроен java-сервер, и использует SocketServer. –

+0

Спасибо, хороший улов. – JensG

Смежные вопросы