服务器如何确保客户端请求不会相互干扰?



我收到一个采访问题,服务器如何不让客户端请求相互拦截?

我实际上无法回答,因为我在网上找不到答案。

我认为是parrel请求/异步调用/并发或线程的原因。

但我没有一个真正的答案。

不确定我是否理解你的问题,但本文很好地解释了nodeJS的单线程模型imo(node-js架构单线程事件循环(

tldr

NodeJS有一个用于事件循环的线程。我不确定具体的数据结构实现,但每个请求都被添加到一个队列中,由事件循环拾取、执行并发送响应。

如果请求执行阻塞IO(或其他阻塞进程*(,则操作会移交给另一个线程,请求会被放入某个等待列表中,事件循环会选择另一个请求进行处理。一旦阻塞操作完成,事件循环就会获取原始请求和操作结果,继续处理请求,然后发送响应。

*如果阻塞过程是由您按程序编码的,那么您最终可能会阻塞事件循环,从而导致DOS。应该使用工作线程。

**NodeJS也有使用集群模块的多线程概念,所以有,但它通常仍然被认为是单线程的。

最新更新