javascript Thrift 客户端挂起
javascript Thrift client hangs
我在 javascript 中有以下 Thrift 客户端代码:
<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 代码,运行ning on localhost: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))
}
QuantSvcHandler 的 ListAllVariables 函数在哪里(基本上是一个骨架函数,只是试图让事情正常工作):
override def ListAllVariables(): util.List[Attributes] =
{
var input = scala.collection.mutable.Buffer[Attributes]()
input
}
我在 ListAllVariables 的第一行和 QuantSvcHandler 处理器的几个地方放置了一个断点。我 运行 在 intellij IDEA 中调试服务器,在 Chrome 中打开我的 HTML 页面,然后按下按钮(调用 javascript calc() 函数的按钮)。按钮一直卡住,我在服务器上看不到任何响应,断点没有被击中。
关于我做错了什么的想法?
您将 HTTP 客户端与套接字服务器混合使用。
尽管 HTTP 使用套接字,但 Thrift HTTP 传输与 Thrift 套接字传输不兼容。 您需要在两端设置完全相同的protocol/transport堆栈。该规则的唯一例外是某些服务器传输隐含地要求客户端有一个额外的框架传输层。
所以解决方案是使用 HTTP 服务器。根据您使用的版本,您可能还必须切换到 JSON 协议。
我在 javascript 中有以下 Thrift 客户端代码:
<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 代码,运行ning on localhost: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))
}
QuantSvcHandler 的 ListAllVariables 函数在哪里(基本上是一个骨架函数,只是试图让事情正常工作):
override def ListAllVariables(): util.List[Attributes] =
{
var input = scala.collection.mutable.Buffer[Attributes]()
input
}
我在 ListAllVariables 的第一行和 QuantSvcHandler 处理器的几个地方放置了一个断点。我 运行 在 intellij IDEA 中调试服务器,在 Chrome 中打开我的 HTML 页面,然后按下按钮(调用 javascript calc() 函数的按钮)。按钮一直卡住,我在服务器上看不到任何响应,断点没有被击中。
关于我做错了什么的想法?
您将 HTTP 客户端与套接字服务器混合使用。
尽管 HTTP 使用套接字,但 Thrift HTTP 传输与 Thrift 套接字传输不兼容。 您需要在两端设置完全相同的protocol/transport堆栈。该规则的唯一例外是某些服务器传输隐含地要求客户端有一个额外的框架传输层。
所以解决方案是使用 HTTP 服务器。根据您使用的版本,您可能还必须切换到 JSON 协议。