Remoting or Raw Socket

Peer之间采用什么样的通信方式呢?是remoting还是raw socket?格式采用2进制还是xml?如果是xml是否需要压缩?是否需要加密?如何检查连接是否断开?

1. remoting vs. Raw socket:
跨平台特性remoting不如Raw socket;
带宽效率remoting不如Raw socket;
通信协议无缝升级和兼容方面2者差不多;
开发难度remoting比Raw socket难(相对我而言)
开发工作量remoting比Raw socket小很多
对.net framework的依赖性remoting大于Raw socket;

2. 2进制 vs. xml;
带宽效率 2进制比xml高;
通信协议无缝升级和兼容方面2进制不如xml;
开发工作量2进制大于xml(如果采用Raw socket的话)
对.net framework的依赖性2者差不多
国际化支持方面2进制不如xml;

3. 是否需要压缩;
压缩后带宽效率提高;
压缩后cpu处理负荷增大;

4。是否加密;
加密后安全性增加;
加密后带宽效率可能降低;
加密后cpu处理负荷增大;

5。定时检查连接 vs 采用租约方式;
租约方式带宽效率可以更高。
租约方式开发难度更大,cpu负荷可能增加;

今天发现,如果在远程对象内部有线程正在运行,那租约就会一直得到续约,也就是永远无法释放资源,所以在远程对象中不应出现线程,如果远程对象真的需要不断的执行一些内部操作,可以考虑把这些责任交给一些一直运行的“服务”,在远程对象析构函数中释放它自己在“职能对象”中占用的资源。
这里涉及到一个进程和线程视图的问题,如果你希望能够完整的控制各部分任务的优先级、资源(cpu)占用率,就需要为不同类型的任务分配不同的进程或线程,不但需要把责任分配给对象(对象知道必要的信息),而且需要把任务分配给线程(线程了解该在什么时候执行任务),可以认为“服务”就是一个有独立进程/线程的对象,“服务”在某些情况下是比对象更好的组件形式。
这些“服务”的接口基本上有:
void Start();
void Stop();
Pipe AddNew();
void Remove(Pipe pipe);
Pipe的接口有:
void Enqueue(object request);
object Dequeue();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值