用workerman/http-client异步,如果被请求的服务器没有开子线程 还是会被堵塞

tangmingliang8

问题描述

用workerman/http-client异步,如果被请求的服务器没有开子线程 还是会被堵塞

单独的部署wokermen,然后用workerman/http-client做异步请求到服务器,如果服务器子线程不开,那么依旧不能访问,这个workerman/http-client是怎么实现异步非闭塞的?

351 1 0
1个回答

six

不知道你说的阻塞具体什么现象?
我理解你说的意思应该是A服务器http-client访问B服务器,B服务器没开多线程,导致B服务器请求是一个一个处理的,并不能并发处理,这是正常现象,但这不能说明 workerman/http-client 被阻塞了。A服务器的 workerman/http-client 并不能提高B服务器的并发啊

  • tangmingliang8 2024-09-01

    我理解的workermen本就是跟服务器分离的,不知道对不对,如果这样分离的去异步请求跟我同步请求的区别是什么呐?

  • TM 2024-09-01

    不占用原本的业务进程吧

  • TM 2024-09-01

    原本的业务进程好像正常使用的

  • six 2024-09-01

    没有 workerman和服务器是分离的 这种说法。
    workerman使用http-client发起请求后,workerman可以继续做其它业务,不需要阻塞等待请求返回。
    如果是workerman使用curl同步阻塞请求,那么workerman就无法继续做其它业务,必须阻塞等待请求返回。

    举个例子,业务需要http调用5个接口,每个接口1秒耗时,http-client可以同时发起5个请求并继续处理其它业务,1秒后得到5个结果。
    而同步请求需要5个http接口需要依次阻塞调用,期间不能做其它业务,至少耗时5秒

  • tangmingliang8 2024-09-01

    感谢您的耐心回复,其实差不多知道这个原理了

  • MarkGo 2024-09-11

    区别在于不占用原有服务。比如你对外提供1个进程处理请求,当使用异步请求时候,客户发给你你通过异步请求B,此时进程可以马上处理下一个发给他的请求。而如果是同步的请求,则进程必须等待B有结果,才开始处理下一个请求。

  • nitron 2024-09-11

    高速公路车道再多,遇到收费站还是得等,对方服务器就是收费站,一个道理

  • tangmingliang8 2024-09-11

    刚才大家的耐心回复,我大致明白的,其实我需要的是复用子进程!我目前只用异步消息列队先大致实现功能!

×
🔝