我在node.js中寫了一個遊戲服務器,有些操作涉及服務器部分的繁重計算。我不想在運行這些計算時停止接受連接 - 當node.js不支持線程時,如何在後臺運行它們?node.js中的長時間運算
回答
我不能擔保其中的任何一個,但如果你在做進程中的工作,那麼已經有幾個獨立的WebWorkers API節點實現,如該節點模塊頁:
- http://github.com/cramforce/node-worker
- http://github.com/pgriess/node-webworker
乍一看,所述秒看起來更成熟了,這些都會讓你基本上做線程編程,但它基本上是演員模型,所以這一切都是ne與消息傳遞,你不能共享數據結構或任何東西。
另外,值得一提的是,node.js團隊打算最終實現原生API,所以即使這些工具不夠完美,也可能是一個體面的權宜之計。
,有些操作涉及在服務器
你是怎麼寫的代碼,是擺在首位的計算重的部分重 計算。這在node.js中很難做到。
我怎麼可以運行它們在後臺 node.js的時候不支持多線程
你可以產卵了幾個工人(節點)的實例,並接受連接進行通信(節點實例)使用例如redis阻止彈出窗口。 Node.js redis庫沒有阻塞。
var spawn = require('child_process').spawn;
listorwhatev = spawn('ls', ['-lh', '/usr']);//or whatever server action you need
//then you can attach events to that list like this
listorwhatev.on('exit', function(code){});
///or in this ls example as it streams info
listorwhatev.stdout.on('data', function(info){sys.puts(info);});
確保每個應用程序都會產生一次spawn過程,然後將其饋入其中,並觀察每個連接的事件。 在處理它之前,您還應該檢查listorwhatev是否仍在運行。因爲我們都喜歡節點崩潰應用程序中的那些未被捕獲的錯誤,所以我們不會;) 當通過殺死或者在您的機器上發生了不好的事情而退出了spawn(pid)並且您沒有優雅地退出代碼中的spawn時,您的流事件處理程序會使應用程序崩潰。
我會傳遞幾兆字節的數據;標準輸出/標準輸入不真正感覺最佳... – nornagon 2010-10-08 03:03:00
- 1. setTimeout在Node.js中等待時間過長
- 2. Node.js的異步時間過長執行
- 3. R中的時間戳算術運算
- 4. Android - 如何長時間計算時間
- 5. Quartz.Net中的長時間運行作業
- 6. Rails中的長時間運行任務
- 7. Excel中的長時間運行
- 8. mpirun運行時間太長
- 9. 長時間運行狀態
- 10. 取消長時間運行
- 11. SQL運行時間太長
- 12. 長時間運行合併
- 13. 長時間運行Flash Player
- 14. 運行時間的算法
- 15. 長時間運行的查詢超時
- 16. c中的長時間運行或調試時間#
- 17. 計算C++中的操作之間的時間長度
- 18. Node.js - 同步操作中推薦的最長時間
- 19. 估算算法從運行時間和變化率的增長順序
- 20. Math.random()運行的時間與簡單算術運算的時間相比如何?
- 21. 長整數運算
- 22. 對於長時間運行的進程,有沒有使用過RabbitMQ和Node.js?
- 23. 長時間運行時泵信息+ C#
- 24. RadixSort算法運行時間
- 25. 處理長時間運行的任務
- 26. aws codedeploy長時間運行的進程
- 27. 長時間運行的進程
- 28. 終止長時間運行的進程
- 29. JSF長時間運行的進程
- 30. 睡眠長時間運行的過程
ryah建議node-webworker當我問他這個問題:) – nornagon 2010-10-08 03:04:09
最近嘗試從http://oguzbastemur.blogspot.com/2013/12/multithread-nodejs.html提到的這個問題 – BigbangO 2013-12-23 21:31:10
處理這個問題的另一篇博文:http ://neilk.net/blog/2013/04/30/why-you-should-use-nodejs-for-CPU-bound-tasks/ – loveNoHate 2014-02-20 13:12:11