嗨,我是Tibco RV的新手.在阅读了Tibco Rendezvous Concept之后,我仍然对传输参数感到困惑:服务,网络,守护进程.
因此,从概念上讲,每台机器上只运行一个守护程序.所以当使用tibrvsend时:
tibrvsend -service 2323 -network "someIPAddress" -daemon "myDaemon" MESSAGE
Run Code Online (Sandbox Code Playgroud)
这是否意味着我在本地主机上使用端口2323发送消息,通过守护程序myDaemon(可能在远程),到网络comeIPAddress?
使用tibrvlisten时:
tibrvListen -service 2323 -network "someIPAddress" -daemon "myDaemon"
Run Code Online (Sandbox Code Playgroud)
这是否意味着我正在使用任何可用端口(我的本地主机上的任何可用守护程序)监听来自myDaemon"已发布到someIPAddress网络的端口2323 " 的消息?
另一个问题是,书"Tibco RV Concept"提到相同的服务不能绑定到两个网络.它是否只适用于生产者机器(因为我们没有为监听器机器指定端口)?因此,如果我们这样做会发生错误:
tibrvsend -service 2323 -network "net1" MESSAGE
Run Code Online (Sandbox Code Playgroud)
和
tibrvsend -service 2323 -network "net2" MESSAGE
Run Code Online (Sandbox Code Playgroud)
同时(如果我们连续做,那应该没问题吧?)
但是对于听众来说:
tibrvlisten -service 2323 -network "net1"
Run Code Online (Sandbox Code Playgroud)
和
tibrvlisten -service 2323 -network "net2"
Run Code Online (Sandbox Code Playgroud)
应该完全没问题?(否则它意味着生产者需要知道彼此的端口号以避免冲突)
如果我对这些概念完全搞砸了,你能用例子解释一下吗?
我有一个函数返回从JNI本机到Java的float.这应该是一个简单的电话,但我得到了奇怪的结果.
在我的测试用例中,我将值1.61863e + 010返回到java中.代码很简单:
cout << result << endl; cout.flush(); // get 1.61863e+010
return (jfloat) result;
Run Code Online (Sandbox Code Playgroud)
(只是为了澄清,如果cout.precision(6),我得到16186300000.000000)
但是我的Java代码正在接收1.61863004E10.我用的时候
DecimalFormat formatter = new DecimalFormat("###,###.######");
System.out.println(formatter.format(result));
Run Code Online (Sandbox Code Playgroud)
我得到16,186,300,416.
416这个来自哪里?我认为jfloat和float都是32位IEEE浮点数,所以不应该有任何精度损失.
非常感谢.