小编Phu*_*ong的帖子

什么是一个很好的基于Java的主从通信机制?

我正在创建一个Java应用程序,它需要JVM之间的主从通信,可能驻留在同一台物理机器上.将在Java EE应用程序服务器(即JBoss)内部运行一个"主"服务器,该服务器将"从"客户端连接到它并动态注册自己进行通信(即主服务器将不知道该服务器的IP地址/端口奴隶因此无法提前配置).主服务器充当控制器,它将向从站执行工作,并且从站将定期响应通知,因此将进行双向通信.

我最初想的是基于RPC的系统,其中每一方都是服务器,但它可能变得复杂,所以我更喜欢一种机制,其中有一个打开的套接字,它们来回交谈.

我正在寻找一种低延迟的通信机制,其中消息主要是原始类型,因此不需要严格的序列化.这是我看过的:

  • RMI
  • JMS:内置于Java,"从"客户端将连接到应用程序服务器中的现有ConnectionFactory.
  • JAX-WS/RS:主服务器和从服务器都是暴露RPC接口以进行双向通信的服务器.
  • JGroups/Hazelcast:使用共享的分布式数据结构来促进沟通.
  • Memcached/MongoDB:使用这些作为"队列"来促进通信,虽然客户端必须轮询,因此会有一些延迟.
  • Thrift:这似乎保持持久连接,但不确定如何将Thrift服务器集成/嵌入JBoss
  • WebSocket/Raw Socket:这可以工作,但需要比我想要的更多自定义代码.

有没有我缺少的技术?

编辑:还看了看:

  • JMX:让客户端连接到JBoss的JMX服务器并接收双向通信的JMX通知.

java rpc jms rmi master-slave

20
推荐指数
2
解决办法
5870
查看次数

为什么我不能在Groovy脚本中的@Grab声明后进行方法调用?

我正在尝试构建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)

这是解析器中的错误吗?

syntax groovy abstract-syntax-tree

17
推荐指数
1
解决办法
1582
查看次数

对Scala方法调用约定感到困惑,特别是Seq上的sum函数

我正在使用新的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,一个不带参数,另一个带上面隐含的.我是否必须在没有括号的情况下调用零参数方法?

scala implicit parentheses

15
推荐指数
1
解决办法
2831
查看次数