我需要在服务器/客户端之间进行通信.我看到CORBA用于不同的语言就像RMI一样工作,是吗?在我的应用程序中,我将不得不在客户端/服务器之间传输对象,传输二进制文件(我看到我可以使用RMI),还可以从一个客户端播放实时流式传输到另一个客户端.我正在考虑CORBA,因为如果我需要它也可以与C++一起使用,不是吗?那么我可以用CORBA播放流媒体吗?
有没有什么理由不将XML-RPC用于对象代理服务器/客户端架构?也许类似"没有它已经过时,现在有X".
为了提供更多细节:我想构建一个框架,允许标准化交互和许多小工具(例如命令行工具)之间的结果交换.如果有人想要集成另一个工具,她会为此目的编写一个包装器.例如,包装器可以将工具的STDOUT转换为架构可用的对象.
目前我正在考虑用Python编写概念证明服务器.之后它可以用C/C++重写.为了确保客户端可以用尽可能多的语言编写,我想到了使用XML-RPC.CORBA似乎过于臃肿,因为服务器不应该太复杂.
感谢您的建议和意见,Rainer
我有这样的代码:
interface Employee
{
string getLastname();
};
#include "Employee.idl"
interface Work
{
Employee getEmployee(in short id);
};
Run Code Online (Sandbox Code Playgroud)
服务器文件:
#include "Employee.hh"
class EmployeeImpl : public POA_Employee
{
private:
char* lastname;
int id;
public:
EmployeeImpl(const char* lastname, int id);
char* getLastname();
};
#include "EmployeeImpl.h"
EmployeeImpl::EmployeeImpl(const char* lastname, int id)
{
this->lastname = const_cast<char*>(lastname);
this->id = id;
}
char* EmployeeImpl::getLastname()
{
return this->lastname;
}
#include "Work.hh"
#include <vector>
#include "EmployeeImpl.h"
using namespace std;
class WorkImpl : public POA_Work
{
private:
vector<EmployeeImpl> employees;
public: …Run Code Online (Sandbox Code Playgroud) BLUF:我试图将独立客户端连接到WebSphere中的Extreme Scale缓存时收到的异常有点误导,所以我在这里提供了解决方案.
我在WebSphere Application Server(WAS)v8.5中成功安装了WebSphere Extreme Scale(WXS)v8.5(注意:不要尝试在Installation Manager中同时执行此操作,否则文件将丢失 - 单独安装它们).我也成功安装了客户端和服务器EAR,因此我可以使用REST服务到客户端,然后连接到服务器以访问缓存.但是,当我尝试从java命令行(或从Eclipse中)运行独立客户端时,我遇到了以下异常:
java.lang.Throwable: org.omg.CORBA.TRANSIENT: initial and forwarded IOR inaccessible vmcid: IBM minor code: E07 completed: No
at com.ibm.rmi.corba.ClientDelegate.createRequest(ClientDelegate.java:1272)
...
Caused by: java.lang.Throwable: connect: Address is invalid on local machine, or port is not valid on remote machine
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:381)
Run Code Online (Sandbox Code Playgroud)
在ObjectGridManager上调用connect时:
_client = _ogManager.connect(hostport, null, clientObjectGridURL);
Run Code Online (Sandbox Code Playgroud)
要检查的第一件事是objectGridClient.properties文件中的主机和端口号是正确的(例如,端口号将与应用程序服务器的端口列表中的BOOTSTRAP端口匹配).就我而言,这是正确的.使用netstat -an | grep查看是否有人在监听端口,或者telnet到主机端口.
接下来要检查的是防火墙不会妨碍与端口的连接.还有来自服务器的客户端回调,因此您需要检查这不会产生问题.就我而言,这不是问题.
我目前坚持使用一些成功编译成.so文件的代码.当我尝试使用以下语句将我的库链接到某些代码时失败:
未定义的符号:_ZrSRKN5CORBA3AnyERPN3RTT5corba4Math7MatrixdE
我能得到的唯一有用的信息是,对象或函数有一些东西使用以下类型:"CORBA :: Any"(常规corba类型)和"RTT :: corba :: Math :: Matrixd"(使用一个hh文件和两个cc文件定义的类型.
我有兴趣知道在我的代码中确切地生成符号的位置以及无法找到它的原因.我怀疑它代表我的一个cc文件中定义的函数,所以这是我编译整个事情的方式:
g ++ -I {CORBA includes} main.cpp one.cc two.cc -L {CORBA libraries}
我应该遵循什么调试过程?
我正在关注有关如何设置 corba 的教程,但我无法使用他们谈论的软件包,而且互联网上的任何地方都无法充分说明如何获取它们。
我希望以下导入不会给我错误。
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
Run Code Online (Sandbox Code Playgroud)
下载JacORB只是给了我一个 github 文件,其中也有包“org.omg”的导入
有人说用这个 findjar 网站,我不知道那个网站上有什么东西
我希望能够使用CORBA功能之一,即我希望我的CORBA客户端在CORBA服务器上执行函数,将参数传递给函数并接收函数的返回值.但是,我想使用不同的协议,一个更简单的协议......这样的事情存在吗?
在阅读文档和教程时,我觉得CORBA很重,很难实现和管理.
所以上述功能是否存在于另一个协议中?
编辑:根据目前的答案澄清我的问题,
我仍然没有实现服务器和客户端.我的客户端需要能够在服务器上执行函数并传递参数并接收返回值.我只是想知道其他协议可以做什么?以更简单的方式?谢谢.