socketref,再见!高德

https://github.com/adoggie

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  246 Posts :: 4 Stories :: 312 Comments :: 0 Trackbacks

常用链接

留言簿(54)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

IMC-SDK

Instant Message Communication 开发工具包

 

作为即时通信软件的底层通信功能被独立分隔出来,同样也可以以用于其他的通信需求.

IMCACEICE吸收优秀的概念和技术,通信处理不免都是C/S的模式,一头请求,另外一头接收处理并返回处理结果. Ice一样,所有操作都 被视为远程调用RPC

不同的应用需求,在设计开发时,我们将定义无数的数据类型影射到应用模型对象,并被序列化传输到远端,这些编码工作无疑是容易出错的,并且是令人沮丧的。既然是RPC的一种实现,IDL是好的中间语言,所有的应用模型都可以定义在IDL,通过slice工具将其翻译到不同的实现语言,slice将处理好数据对象的Marshalling&UnMarshalling等工作。

IMCICE的相同:

采用一致的数据类型(int,byte,short,long,float,double,string)

一致的通信协议定义,参考ice1.3文档

支持同步和异步调用;支持oneway调用

支持参数的out

 

IMCICE不同之处:

IMC 不支持class;接口不能被当作参数传递;

 

 

支持TcpUDT通信方式,tcpudt的连接(connection)上进行双向的Rpc调用(Ice一般在一个连接上是单向的)

 

调用的返回:

1.      同步调用: 

1.1. 接收到返回结果

1.2. 超时(timeout调用时)

1.3. 连接(connection)断开

1.4. 系统结束处于终止清理阶段(将删除所有的connection)

2.      异步调用:

即可返回

 

函数序列化(operator):

         参数支持INOUT类型,但不支持 INOUT类型,且OUT类型必须在IN之后被定义(ice)。每个函数(operator)都将有一个仅对于interface内的索引编号(integer),参数将被置于参数栈(ParameterStack).

         字节流到函数参数时,先从包内找出此次调用接口的类型,根据函数编号找到解析此参数栈的函数,并将剩余的字节流传递到以上函数去解析

 

Struct OperatorMap{

         Int  index;

         String name;

         Void decode(ByteArray& bytes);

};

Class Security{

Virtual string close(int reason);

Friend __security_decode_close;

}

Static __security_decode_close(ByteArray& bytes, void* obj);

OperatorMap __omap_security={0,”close”,__security_decode_close};

 

//解码字节到函数参数,并最终调用Rpc函数

//以下代码自动生成

ParameterStack __security_decode_close(ByteArray& bytes, void* obj){

         Security * sec = (Security*)obj;

         Parameter p;

         ParameterStack pstack;

P = unMarshallingParameter(bytes,”int”);

Int reason = p;

         P = Sec->close(reason);

         Pstack.push(p);

         Return pstack;

}

 

 

posted on 2010-09-24 02:13 放屁阿狗 阅读(272) 评论(0)  编辑 收藏 引用 所属分类: OpenSource开源工程

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理