假设有一个天气模拟器生成/计算组成的天气,每 0.5 秒触发一次 setInterval 并运行一堆计算以获取读数并处理数据以供人类阅读。
然后它会通过套接字触发相关数据到登录方,也许只有当数据实际发生变化时。
那么在子进程中单独运行天气模拟/生成器并将 I/O 保留在节点的单线程中会更好吗?
或者,这会产生锁定要求吗?
假设有一个天气模拟器生成/计算组成的天气,每 0.5 秒触发一次 setInterval 并运行一堆计算以获取读数并处理数据以供人类阅读。
然后它会通过套接字触发相关数据到登录方,也许只有当数据实际发生变化时。
那么在子进程中单独运行天气模拟/生成器并将 I/O 保留在节点的单线程中会更好吗?
或者,这会产生锁定要求吗?
我认为应该指导您的原则是关注点分离。您的 node.js 服务器是一个通信管道。您的天气模拟器就是这样。对其中一个所做的更改不太可能涉及另一个。如果以后您的天气模拟器变得更重,或者您开始获得比预期更多的用户,这也是一个更具可扩展性的选择。
如果 Web 客户端可以,我敢肯定他们会想要直接订阅天气事件源,但不要让这愚弄您认为您应该将 websocket 与模拟器混为一谈。
如果计算量很大,我强烈建议您将它们作为子进程运行并保持 node.js 事件循环响应。如果您收听子标准输出的事件数据并完成,您可以在数据可用时立即发送数据。
确保你使用异步读写,这样你就不会开始阻塞,你不必担心锁。