ajax调用一个方法,该方法里面调用Gateway::sendToClient

workman

ajax调用一个方法,该方法里面调用Gateway::sendToClient,怎么等待Gateway::sendToClient给出客户端的反馈呢,如果没有返回的话,ajax请求完了直接就断了,浏览器页面就收不到客户端的返回数据了,请问怎么办呢
[attach]306[/attach]

3118 3 0
3个回答

walkor

说下描述下场景和服务端环境吧。
谁处理的ajax,apache?nginx?,使用的GatewayClient客户端提供的Gateway::sendToClient 接口发送数据?

  • workman 2016-05-24

    apache服务器 浏览器发送一个ajax请求一个php方法,php方法里面通过Gateway::sendToClient 向另一个连接GatewayWork的终端发送一个命令,终端执行这个命令后会返回一个执行成功或者执行失败的数据,怎样让浏览器获取到返回的数据,现在因为Gateway::sendToClient 没有返回,所以ajax执行php方法后连接就断开了,获取不到数据,怎样让ajax一直等待终端那边返回的执行结果呢?

  • workman 2016-05-24

    使用的GatewayClient客户端提供的Gateway::sendToClient 接口

walkor

Gateway::sendToClient 发送之后,不能等待客户端的反馈。原因是客户端一般是暴露给外网的,并且客户端不太可控,导致客户端等待客户端反馈可能会耗时很长时间,由于外网延迟等待10秒都有可能。

这样就有可能会导致apache服务器的所有进程都阻塞在Gateway::sendToClient后等待客户端反馈。导致apache变慢,甚至无法使用。

正确做法应该是Gateway::sendToClient后,客户端(浏览器)收到消息,通过ajax通知apache,客户端消息已经收到。如果这个消息需要反馈给发起消息的客户端,可以再调用Gateway::sendToClient发送给发起者即可。

  • 暂无评论
ivan

感觉参考聊天室的方式,用websocket可以群发消息,然后收其他客户端反馈是不是?

  • 暂无评论
年代过于久远,无法发表回答
🔝