Delphi中可否实现异步SOAP或回调?解决办法
Delphi中可否实现异步SOAP或回调?
基本需求:
Client在内网,Server在公网。当Client连上Server后,Server由用户操作,可随时向Client发命令。Client实时执行完后返回结果给Server,Server处理并显示执行结果。
以上过程希望通过SOAP实现,不知Delphi中可否实现异步SOAP或回调?
还有一个半成品的思路:
Client在一个心跳周期中问Server:我需要做什么?然后阻塞
Server不马上回答,直到用户指定了某操作了以后,才回答:你要做XXX。(这一步是否可以用线程中加WaitForSingleObject?)
Client收到这个回复,执行XXX操作,把结果送回服务器,并要求下一轮:“我需要做什么?”
若Server的回复超过了1个心跳周期,Client重复上述过程。Server也使用定时器清除过期的请求。
当然如果SOAP可以做到Server随时调Client中的函数,上面的所有机制都不用了。不知道Delphi中的SOAP能否满足上述需求?
------解决方案--------------------
问题确实不要解决
首先,角色对调不好搞,因为客户端在内网,没有对外ip(不知道在客户端局域网内上网的服务器通过端口映射是否可以解决)
其次,说一个大概方法:把客户端做成一个服务,每隔一段时间向服务器端发送请求操作的指令(发过后通过变量状态决定是否重复发),而服务器端根据读到的信息,用一个变量来记录变化(比如false),然后服务器端创建线程并挂起,当服务器端操作后(比如要客户端数据),唤醒线程,返回要求,客户端接到后再通过要求操作
------解决方案--------------------
有连接才能阻塞,soap,http根本没有连接,你怎么阻塞?
除非客户端建立一个通信服务,服务器像要发送命令则连接这个服务端口
,客户 '听 '到了这个命令立刻去做xxx。
要不你去参考ajax?
代码我看不懂,
你的思路颠覆了我对ws的认识,
我需要回去清醒一下。
------解决方案--------------------
Ajax也是客户端主动请求服务器的,所有的web程序都是客户端主动请求服务器的,客户端被动接收Xml不会吧?肯定搞错了
------解决方案--------------------
Ajax也是客户端主动请求服务器的,所有的web程序都是客户端主动请求服务器的,客户端被动接收Xml不会吧?肯定搞错了
是可以实现的。
IE从 XXX.0 开始(忘记版本了 )就在内嵌了一个 XXX 器(忘记名字),有了这个小东西,Ajax 才能发挥自如, 如果用户更换浏览器为 XXX.0 - 1 版本,肯定 Ajax 是发挥不了作用的。
基本需求:
Client在内网,Server在公网。当Client连上Server后,Server由用户操作,可随时向Client发命令。Client实时执行完后返回结果给Server,Server处理并显示执行结果。
以上过程希望通过SOAP实现,不知Delphi中可否实现异步SOAP或回调?
还有一个半成品的思路:
Client在一个心跳周期中问Server:我需要做什么?然后阻塞
Server不马上回答,直到用户指定了某操作了以后,才回答:你要做XXX。(这一步是否可以用线程中加WaitForSingleObject?)
Client收到这个回复,执行XXX操作,把结果送回服务器,并要求下一轮:“我需要做什么?”
若Server的回复超过了1个心跳周期,Client重复上述过程。Server也使用定时器清除过期的请求。
当然如果SOAP可以做到Server随时调Client中的函数,上面的所有机制都不用了。不知道Delphi中的SOAP能否满足上述需求?
------解决方案--------------------
问题确实不要解决
首先,角色对调不好搞,因为客户端在内网,没有对外ip(不知道在客户端局域网内上网的服务器通过端口映射是否可以解决)
其次,说一个大概方法:把客户端做成一个服务,每隔一段时间向服务器端发送请求操作的指令(发过后通过变量状态决定是否重复发),而服务器端根据读到的信息,用一个变量来记录变化(比如false),然后服务器端创建线程并挂起,当服务器端操作后(比如要客户端数据),唤醒线程,返回要求,客户端接到后再通过要求操作
------解决方案--------------------
有连接才能阻塞,soap,http根本没有连接,你怎么阻塞?
除非客户端建立一个通信服务,服务器像要发送命令则连接这个服务端口
,客户 '听 '到了这个命令立刻去做xxx。
要不你去参考ajax?
代码我看不懂,
你的思路颠覆了我对ws的认识,
我需要回去清醒一下。
------解决方案--------------------
Ajax也是客户端主动请求服务器的,所有的web程序都是客户端主动请求服务器的,客户端被动接收Xml不会吧?肯定搞错了
------解决方案--------------------
Ajax也是客户端主动请求服务器的,所有的web程序都是客户端主动请求服务器的,客户端被动接收Xml不会吧?肯定搞错了
是可以实现的。
IE从 XXX.0 开始(忘记版本了 )就在内嵌了一个 XXX 器(忘记名字),有了这个小东西,Ajax 才能发挥自如, 如果用户更换浏览器为 XXX.0 - 1 版本,肯定 Ajax 是发挥不了作用的。