我在 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 代码,在 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 Sockets 传输不兼容。您需要在两端设置完全相同的协议/传输堆栈。该规则的唯一例外是某些服务器传输隐式需要客户端上的附加帧传输层。
所以解决方案就是使用HTTP服务器。根据您使用的版本,您可能还需要切换到 JSON 协议。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)