ajax調(diào)用一個方法,該方法里面調(diào)用Gateway::sendToClient,怎么等待Gateway::sendToClient給出客戶端的反饋呢,如果沒有返回的話,ajax請求完了直接就斷了,瀏覽器頁面就收不到客戶端的返回數(shù)據(jù)了,請問怎么辦呢
[attach]306[/attach]
說下描述下場景和服務端環(huán)境吧。
誰處理的ajax,apache?nginx?,使用的GatewayClient客戶端提供的Gateway::sendToClient 接口發(fā)送數(shù)據(jù)?
apache服務器 瀏覽器發(fā)送一個ajax請求一個php方法,php方法里面通過Gateway::sendToClient 向另一個連接GatewayWork的終端發(fā)送一個命令,終端執(zhí)行這個命令后會返回一個執(zhí)行成功或者執(zhí)行失敗的數(shù)據(jù),怎樣讓瀏覽器獲取到返回的數(shù)據(jù),現(xiàn)在因為Gateway::sendToClient 沒有返回,所以ajax執(zhí)行php方法后連接就斷開了,獲取不到數(shù)據(jù),怎樣讓ajax一直等待終端那邊返回的執(zhí)行結(jié)果呢?
Gateway::sendToClient 發(fā)送之后,不能等待客戶端的反饋。原因是客戶端一般是暴露給外網(wǎng)的,并且客戶端不太可控,導致客戶端等待客戶端反饋可能會耗時很長時間,由于外網(wǎng)延遲等待10秒都有可能。
這樣就有可能會導致apache服務器的所有進程都阻塞在Gateway::sendToClient后等待客戶端反饋。導致apache變慢,甚至無法使用。
正確做法應該是Gateway::sendToClient后,客戶端(瀏覽器)收到消息,通過ajax通知apache,客戶端消息已經(jīng)收到。如果這個消息需要反饋給發(fā)起消息的客戶端,可以再調(diào)用Gateway::sendToClient發(fā)送給發(fā)起者即可。