急呀!我的程序是一个三层结构的,一个应用程序服务器,多个客户机,怎样让任何一个客户机增加了记录,其它客户机及时刷新,网络开销最小了?我的程序原先的办法是,当一个客户机更新了,然后发消息给各客户机,各客户机收到后这样处理
   clientdataset1.close;
   clientdataset1.open;
   这样的后果是,当数据记录越来越多时,速度越来越慢,网络开销很大,有不有什么办法在三层结构中加一些处理,变成这样的处理方式,当收到增加记录后只是向各客户机发那些更新的数据了?
哪位高足能告诉我,我此先谢谢了!

解决方案 »

  1.   

    任意客户机更新数据后及时applyupdata。至于刷新我同意newyj(老鬼)的观点,
    一段时间后reflash一次。
      

  2.   

    你看这样可以吗,在客户端的afterpost之前,用一个自定义的数组recorder[]
    记录下更新的所有数据的ID号。在ApplyUpdate之后,将数组recorder[]送到
    各个客户端,用数据时,判断一下,如果客户端的缓存中的数据ID号没有。则到
    数组中查找,如找到则到主机的数据库中将数据提取出来。这样只是传递了数组,
    应该很快的。
      

  3.   

    同意halfdream,在中间层TDataSetProvider可以知道你的某一个客户端更新的数据,Delta包,在AfterPOst之后,如果更新成功,则将这个Delta包发送给其他客户端(在中间层增加相应的方法),其他客户端的ClientDataSet仅更新或加入新的数据,这样可以让网络开销比较小
      

  4.   

    应该把delta传给服务器,再有服务器转发给其他客户端
    然后
    clientdataset2.delta:=delta;
    clientdataset2.MergeChangeLog ;
    这就好了
      

  5.   

    强烈关注,我也正犯愁呢?
    找到解决方法顺便告诉我
    [email protected]
    谢谢
      

  6.   

    如有例子。请给我一份[email protected]
      

  7.   

    可以捕捉数据发生变化的信息,即使给客户端发送消息,提醒client更新数据(相关),如有更好方法,我也很感兴趣!
      

  8.   

    : del_c_sharp(摩托还需骆拉) ( ) 信誉:100  2002-8-29 21:53:52  得分:0 
     
     
      
    应该把delta传给服务器,再有服务器转发给其他客户端
    然后
    clientdataset2.delta:=delta;
    clientdataset2.MergeChangeLog ;
    这就好了
    这种方法绝对行不通
     
     
      

  9.   

    有一点不明白,及时刷新的目的是什么?你到底要实现什么?
    我曾经处理过这样的问题,最后,我用Socket实现数据库的传输,
    当然,及时刷新就不是一个问题了!
      

  10.   

    我有一点建议:
    当服务端数据更新时,用UDP向客户端发送信息,
    是否更新由客户决定,
      

  11.   

    利用客户端移动记录或是查询数据的操作时close,open
      

  12.   

    ihihonline(小小->爱被下载中……) 老兄说的很对.
    (呵呵,也许是为小姐)  用Delphi的MIDIA做中间层,那中间层应用服务器是以(DCOM)EXE文件存在在服务器上的,是单元线程的COM组件,每个客户一个线程,每个客户的数据空间是完全隔开的,哪怕你认为你设置了全局对象或全局变量,也不可能在多客户之间共享,只是在各个客户数据空间中维护了一份全局对象的拷贝.
      安全,但不灵活.
      可是,还真没看到过怎样制作多线程和自由线程组件的书籍.
      哪位知道,一定帮我介绍介绍,不胜感激.
      

  13.   

    强烈关注
       每一个客户端,使用三层的话,数据更新之后应该使用applyupdate作一下
    更新。
      我也正处理这方面的问题,大家不妨探讨。
      

  14.   

    del_c_sharp(摩托还需骆拉) ( ) 信誉:100  2002-8-29 21:53:52  得分:0 
    “应该把delta传给服务器,再有服务器转发给其他客户端
    然后
    clientdataset2.delta:=delta;
    clientdataset2.MergeChangeLog ;
    这就好了”delta属性只读!
    关注
      

  15.   

    多用个clientdataset记录delta值,再用MergeChangelog合并
      

  16.   

    建立大家把三层研究深入一点?
    回调机制没有听过吗?
    还有事件呢?
    把中间层的AFTERINSERT事件发送到客户,
    不就解决了吗?
    不是叫你在服务器的AFTERINSERT事件做什么事情哟.
    就等于把事件发送到客户.
    客户在触发事件就刷新了.
      

  17.   

    应该把delta传给服务器的一个表,再有服务器转发给其他客户端
      

  18.   

    客户端数据更新后,用ApplyUpdate实现向服务器的数据更新,同时向其他客户广播更新消息。各客户端更新数据无须Close再Open 这样太耗网络资源了,客户向服务器索取数据时不要一次取完,而应设置每次取的记录数较少,这样性能将大大提高。