我正在创建一个Java应用程序,它需要JVM之间的主从通信,可能驻留在同一台物理机器上.将在Java EE应用程序服务器(即JBoss)内部运行一个"主"服务器,该服务器将"从"客户端连接到它并动态注册自己进行通信(即主服务器将不知道该服务器的IP地址/端口奴隶因此无法提前配置).主服务器充当控制器,它将向从站执行工作,并且从站将定期响应通知,因此将进行双向通信.
我最初想的是基于RPC的系统,其中每一方都是服务器,但它可能变得复杂,所以我更喜欢一种机制,其中有一个打开的套接字,它们来回交谈.
我正在寻找一种低延迟的通信机制,其中消息主要是原始类型,因此不需要严格的序列化.这是我看过的:
有没有我缺少的技术?
编辑:还看了看:
我正在尝试构建DSL并使用全局AST变换来完成它.该脚本编译得groovyc
很好,但我希望能够让用户使用Grab/Grape来拉取JAR并让它立即执行作为一个常规脚本.
然后我发现我无法正确执行,因为如果在@Grab调用之后没有方法声明或import语句,脚本中会出现解析错误.
这是一个例子:
@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
println "Hello World!"
Run Code Online (Sandbox Code Playgroud)
它看起来应该工作,但它抱怨(这是GroovyConsole脚本的输出):
startup failed:
Script1.groovy: 4: unexpected token: println @ line 4, column 1.
println "hello"
^
1 error
Run Code Online (Sandbox Code Playgroud)
尝试不同的东西使它工作,就像一个import语句:
@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
import groovy.lang.Object
println "Hello World!" ?
Run Code Online (Sandbox Code Playgroud)
或者方法缩小:
@Grab(group='mysql', module='mysql-connector-java', version='5.1.6')
def hello() {}
println "Hello World!"
Run Code Online (Sandbox Code Playgroud)
这是解析器中的错误吗?
我正在使用新的Scala IDE(Eclipse 3.6.2 + Scala IDE 2.0.0 [Scala 2.9.0]),我尝试做一些像这样简单的事情:
(1 to 10).sum
Run Code Online (Sandbox Code Playgroud)
这很好,但我最近也做了很多Groovy,我自动写道:
(1 to 10).sum()
Run Code Online (Sandbox Code Playgroud)
第二个版本在IDE中给出了编译器错误,并显示以下消息:
方法总和的参数不够:(隐式数:数字[B])B.未指定的值参数num.
我在Scala API上看到有两个版本的sum,一个不带参数,另一个带上面隐含的.我是否必须在没有括号的情况下调用零参数方法?
groovy ×1
implicit ×1
java ×1
jms ×1
master-slave ×1
parentheses ×1
rmi ×1
rpc ×1
scala ×1
syntax ×1