CSDN博客

img hxhbluestar

Remoting or Raw Socket

发表于2004/10/4 0:35:00  1690人阅读

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

相关文章推荐

img
取 消
img