闪亮:它如何处理并发请求?
Shiny: how does it handle concurrent requests?
如果我使用
启动 Shiny 应用程序
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
更新时,不可能更新其他输入。这样做是为了避免竞争条件
- 您可以通过使用 promises 程序包
在 shiny
中利用 async
编程
- 如果您想集成一些更高级的
js
库,您可以使用 V8 包
- 您还可以 integrate
react.js
与 shiny
如果我使用
启动 Shiny 应用程序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
更新时,不可能更新其他输入。这样做是为了避免竞争条件 - 您可以通过使用 promises 程序包 在
- 如果您想集成一些更高级的
js
库,您可以使用 V8 包 - 您还可以 integrate
react.js
与shiny
shiny
中利用 async
编程