用workerman/http-client异步,如果被请求的服务器没有开子线程 还是会被堵塞
单独的部署wokermen,然后用workerman/http-client做异步请求到服务器,如果服务器子线程不开,那么依旧不能访问,这个workerman/http-client是怎么实现异步非闭塞的?
不知道你说的阻塞具体什么现象? 我理解你说的意思应该是A服务器http-client访问B服务器,B服务器没开多线程,导致B服务器请求是一个一个处理的,并不能并发处理,这是正常现象,但这不能说明 workerman/http-client 被阻塞了。A服务器的 workerman/http-client 并不能提高B服务器的并发啊
我理解的workermen本就是跟服务器分离的,不知道对不对,如果这样分离的去异步请求跟我同步请求的区别是什么呐?
不占用原本的业务进程吧
原本的业务进程好像正常使用的
没有 workerman和服务器是分离的 这种说法。 workerman使用http-client发起请求后,workerman可以继续做其它业务,不需要阻塞等待请求返回。 如果是workerman使用curl同步阻塞请求,那么workerman就无法继续做其它业务,必须阻塞等待请求返回。
workerman和服务器是分离的
举个例子,业务需要http调用5个接口,每个接口1秒耗时,http-client可以同时发起5个请求并继续处理其它业务,1秒后得到5个结果。 而同步请求需要5个http接口需要依次阻塞调用,期间不能做其它业务,至少耗时5秒
感谢您的耐心回复,其实差不多知道这个原理了
区别在于不占用原有服务。比如你对外提供1个进程处理请求,当使用异步请求时候,客户发给你你通过异步请求B,此时进程可以马上处理下一个发给他的请求。而如果是同步的请求,则进程必须等待B有结果,才开始处理下一个请求。
高速公路车道再多,遇到收费站还是得等,对方服务器就是收费站,一个道理
刚才大家的耐心回复,我大致明白的,其实我需要的是复用子进程!我目前只用异步消息列队先大致实现功能!
不知道你说的阻塞具体什么现象?
我理解你说的意思应该是A服务器http-client访问B服务器,B服务器没开多线程,导致B服务器请求是一个一个处理的,并不能并发处理,这是正常现象,但这不能说明 workerman/http-client 被阻塞了。A服务器的 workerman/http-client 并不能提高B服务器的并发啊
我理解的workermen本就是跟服务器分离的,不知道对不对,如果这样分离的去异步请求跟我同步请求的区别是什么呐?
不占用原本的业务进程吧
原本的业务进程好像正常使用的
没有
workerman和服务器是分离的
这种说法。workerman使用http-client发起请求后,workerman可以继续做其它业务,不需要阻塞等待请求返回。
如果是workerman使用curl同步阻塞请求,那么workerman就无法继续做其它业务,必须阻塞等待请求返回。
举个例子,业务需要http调用5个接口,每个接口1秒耗时,http-client可以同时发起5个请求并继续处理其它业务,1秒后得到5个结果。
而同步请求需要5个http接口需要依次阻塞调用,期间不能做其它业务,至少耗时5秒
感谢您的耐心回复,其实差不多知道这个原理了
区别在于不占用原有服务。比如你对外提供1个进程处理请求,当使用异步请求时候,客户发给你你通过异步请求B,此时进程可以马上处理下一个发给他的请求。而如果是同步的请求,则进程必须等待B有结果,才开始处理下一个请求。
高速公路车道再多,遇到收费站还是得等,对方服务器就是收费站,一个道理
刚才大家的耐心回复,我大致明白的,其实我需要的是复用子进程!我目前只用异步消息列队先大致实现功能!