JavaScript如何编写一个既可以在java中也可以在C++中解析的脚本
我们有java和C++实现我们的产品,它是一个分布式消息系统。
我正在编写一个框架来跨多个服务器运行系统测试。我需要我们的“测试协调器”流程向每个服务器发送指令,告诉它该做什么(例如,发送100条示例消息,或等待消息等)
我真的希望通过向每个服务器发送包含其指令的脚本来实现这一点。这允许我创建哑测试服务器,测试指令中嵌入了所有智能
如果我所有的服务器都是Java,我会用Groovy或类似的语言编写。但是我希望我们的C++实现能够解析同一个脚本。我想知道是否可以执行Javascript来调用Java/C++类来发送消息等
有没有一种简洁的方法可以做到这一点
如果所有这些都失败了,我将创建一个XML格式来声明性地包含测试参数(而不是强制包含测试指令)。但这需要测试服务器包含比我希望的更多的测试特定智能
感谢您的建议
# 1 楼答案
有C++和Java的JavaScript解析器可用,因此这绝对是您可以使用的东西;然而,我认为这不是一个好主意:Javascript代码当然可以与Java code和C++ code交互;问题是,如果你希望JavaScript代码不知道它是在C++还是java基础上运行的,从java调用C++的话,实际上并没有什么意义,因为这些调用又是语言-(甚至是引擎)特定的。p>
更简单的解决方案可能是使用您所说的声明性格式,但我不会选择XML,除非数据需要与更广泛的受众交换;相反,我会使用JSON,它在Java和C++上得到了很好的支持
最好的解决方案(尽管可能也是涉及最高努力的一个)可能是开发自己的DSL(领域特定语言),以及C++和java中的解析器。p>
# 2 楼答案
也许你可以看看卢阿。它在C++中得到很好的支持,而且似乎也支持java(参见this question)
# 3 楼答案
这是一种互操作性WSDL最初设计用于促进。我不知道为什么要发明一种XML格式来实现SOAP已经实现的功能。我是说,你可以,但对下一个人来说,这将是一场维护的噩梦。另外,引入另一种编程语言(客户端,除非您想在混合中添加nodej)作为两者之间的粘合层会增加系统的复杂性
我要做的是:
如果您正在向服务器发送命令,那么可以考虑使用Command pattern来封装已知命令集(我假设在您的需求中列举了这组命令)。您可以使用“组合”命令使用批处理命令
然后,您的“测试协调器”将构建一个批处理命令,使用声明的服务将其发送到所选的服务器,并且您的实现可以以特定于语言的方式处理这些命令。根据系统具有的命令类型,可能适合将每个实现委托给Ant或Make
# 4 楼答案
你也可以考虑使用CORBA……:)p>