>如果我使用
R -e 'shiny::runApp("/app", host="0.0.0.0", port=8888)'
它如何处理并发请求/它的工作器模型是什么?
每个请求是否在不同的线程、进程中处理,是否使用事件循环模型,甚至是否一次只处理一个请求?
- 因为R是单线程的,所以
shiny
,并且它建立在node
之上 - 所有会话都通过
websocket
连接到该线程 - 使用标准
event loop model
进行传统闪亮的反应式编程
有一个 flush cycle
的概念,它执行以下操作:receiving, updating, reacting, and sending
这样,当reactives
或observers
更新时,不可能更新其他输入。这样做是为了避免竞争条件- 您可以使用承诺包在
shiny
中利用async
编程 - 如果你想集成一些更高级的
js
库,你可以使用 V8 包 - 您还可以将
react.js
与shiny
集成