想写这个文章,但是却发现datasnap没这功能,毕竟datasnap不是基于消息的(但是RO框架却有的),郁闷。
要实现异步服务调用,参考RO的设计,可这么来实现一个同RO一样的假的异步
1。客户端,Call服务方法时,不在主线程里,新起一个线程去Call,等待放在了线程里。
2。客户端,变成多线程了,为了不阻塞自身的调用,所以线程去Call,应该SQLConnection1.CloneConnection出来一个连接去单独做这个事情。就算是Clone出来的,也是新起的连接,服务端的Session是新Session,服务端的服务方法也是新new出来的服务类(Session模式下),所以状态是不一样的,要注意。
还有一个想法是用异步socket来实现,但是感觉和indy有些冲突,以后再谈
这样的实现,也是有自身的问题,毕竟客户端还是在等待服务端的执行完毕。 很多时候,我们只是在客户端触发一个事情,将触发内容通知给服务器,而客户端并不需要等待服务器执行完毕,服务器自身跑上20分,30分后自己退出(比如手动执行系统维护)。在datasnap里要解决这个问题,就应该在服务器的服务方法里下手了:
1。 服务方法里,自己启动自销毁线程(FreeOnTerminate=True),线程去做事,服务方法自己返回。
我这里说到的两个情况,如果EMBT的datasnap框架能自己封装进去,我想将会是件很好的事(异步同步和服务自身没关系,只和客户端的调用方法有关),WCF都能异步同步都玩转啊
没有评论:
发表评论