C/S实时数据更新(100分)

  • 主题发起人 主题发起人 dong8117
  • 开始时间 开始时间
D

dong8117

Unregistered / Unconfirmed
GUEST, unregistred user!
公司老总要求做一个来访人员登记系统,我用D7 以C/S模式做完后交给老板看时,又提出了新的要求,就是在前台的操作员每录入一个来访人员时,老板的机子就要实时的显示出更新的数据,就是在老板的机子不用做任何的操作,数据就要自动更新过来.并且还提出了每有数据更新了就要像QQ的聊天框一样,有信息时,在已打开的聊天框中以颜色闪动。这方面我没有做过,在网上找了很多资料,都说用多线程,也下了很多例子,但是做出来的效果都不理想,所以希望各位高手指点指点。万分感谢!!!!
 
局域网内可以采用udp协议,数据更新后通知客户端刷新数据。
 
能具体点吗?
代码:
 
放个TIMER,设为一秒刷新一次,如果有数据变更,就顺便跳出个框来.,可以用RECORDCOUNT来判断.这个功能不难吧.如果是三层的话,就直接通过接口方法来刷新就比较完美一点.没有TIMER这种变相的技术欺骗了
 
tcp udp都行,如果是局域网,用UDP就行了,简单,再自己封一个协议,搞定,不一定要什么多线程
 
UDP如何使用呢?请给个例子看看,好吗?谢谢!
 
UDP广播通知数据有了变化
程序到服务器上读数据并处理
 
给个例子看看呀,各位.在线等候,谢绝
 
编程 炒股 两不误 请上 WWW.000002.CN
 
有两种方式:
1种就是定时刷新的方式,另1种就是UDP广播的形式。但无论哪种方式,如何设置数据结构是非常重要的,比如UDP方式,你要考虑到老板不在线时,如何知道他上次下线后,本次上线前新增的记录? 
 所以建议可以考虑作如下处理:
 1、在服务器端设置一个表,专门用作消息的缓冲,也即记录新增记录的主键,必要时还可以定义消息接收的用户。
 2、在用户添加时,可以在数据集的AfterApply或类似事件中,自动将主键添加到上表中。
 3、下面就体现两种方式的区别, 一种就是像消息服务器一样,对缓冲池中的记录进行处理,以UDP方式发送消息; 另一种是客户端定期检索。 
 4、根据消息收到的主键,然后取相应记录,可以用ClientDataSet.AppendData添加到数据集中,这种方式比刷新数据集效率要高,第二种好处就是也可以知道新增的是哪些记录。
 
这个小程序,n年前就做了,socket弄的,有远程连的时候也能同步
若没有远程的,就UDP广播啦,自己定义个通信协议,如:
发“1”是A表更新,发"2"是B表更新...然后在UDP监听到这个消息时解释处理。
 
现在我是这样做的,我用分开来做,clientsocket 放在客户机的程序,serversocket放在服务器的机子上,客户机每次登录时都会写入到一个用户登录表中,记录了登录的用户名与IP,当操作员在客户机上输入了新数据时,并且指明要访问哪一个用户时,按确定后,即执行APPEND/EDIT时客户端就会将根据这个被访问的用户在登录表中查找出对应的IP地址,并将这个IP地址发送给服务器端,但是这时服务器却无法根据客户端发送的IP进行对这个IP的客户端回复.你们说说我这种方法是不是不对呀,或者没有将clientSOCKET/serversocket 写好呀?但是它们是能通信的呀.
 
用socket的话,不需要登陆表的。
TServerSocket.Socket.ActiveConnections本来就是一个数组,只要在OnRead事件里将传入的TCustomWinSocket与这个数组里的每个比较一下,凡是不相等的,就将收到的消息转发过去,即可,程序非常简单的,也不需要啥多线程
 
to wpy020327
按照这种方法的话,那不是不能指明来回复具体要访问哪个一个用户了吗?你有这方面的例子吗?能不能发上来看看,或发到我的邮箱里面.zmsoft@21cn.com,万分感谢!
 
多人接受答案了。
 
后退
顶部