2017-04-03 36 views
1

我在我的服務器上安裝了phpnodejs。我通過phpPHP - 有什麼辦法來控制流程執行嗎?

像調用nodejs代碼使用node canvas

<?php 
    exec(node path/to/the/js/file); 
?> 

問題:

此執行的每個過程消耗的,因爲node canvas內存周圍250 MB。因此,如果我的服務器的內存大約爲8Gb,則用戶可以在任何給定的時間點使用該服務,並且如果用戶數超過,則存在服務器崩潰的風險。

是否有任何可擴展的解決方案來解決這個問題?

UPDATE我必須使用的,因爲我的業務需求Canvas服務器端,所以我用node canvas,但耗費巨資被賦予一個巨大的問題的內存。

+0

位寬是不是?我們不知道您的要求,我們也不知道用例是什麼來計算什麼可能是最好的建議作爲相關的解決方案? –

+0

限制選擇的httpd中的請求數量? –

+0

@JonStirling:嗨,我已經更新了這個問題,我們已經實現了一個業務邏輯,它使用節點畫布 – Abhinav

回答

1

你的問題是,你爲每個請求啓動一個新的node.js進程,這就是爲什麼內存佔用如此巨大,而不是構建node.js的原因。
但是,node.js的構建是爲了在一個進程中處理很多不同的請求,並將其用於您的優勢。

我建議你要做的是隻啓動一個node.js進程,並找到另一種在PHP進程和node.js進程之間進行通信的方式。

有一個很多不同的方式來做到這一點,一些比其他人更perfomant,一些比其他更難建立。都有優點和缺點,但由於兩者都是與網絡相關的語言,因此可以確定HTTP請求都支持這兩種語言。

所以你應該做的是一個基本的node.js/Express服務器,可能只有一個API點,它執行你已經做的代碼,並返回結果。這很容易做到(特別是如果你使用JSON在它們之間進行通信),並且雖然我不知道PHP,但我很確定很容易發送HTTP請求並解釋答案。

如果您已經準備好在node.js中挖掘,您可以嘗試套接字或MQ,這應該是更高性能的。

這樣的話,你只能有一個node.js的過程中,不應該在內存中成長和處理更大量的客戶端,就不必使用exec,並且有一個第一次嘗試用快遞。

+0

嗨,thanx的建議,我實際上有點困惑你說什麼,即使一個進程處理多個請求?所有請求都會同時運行嗎?如果它同時運行,那麼它肯定會消耗記憶儀式?對不起,如果我聽起來有點天真,我沒有太多關於nodejs的想法。 – Abhinav

+0

在[node.js聊天室](https://chat.stackoverflow)上討論可能會更簡單。com/rooms/642/node-js),但要恢復:與PHP不同,節點js在一個進程中處理多個請求,並且擅長這樣做。是的,不會,這取決於您是否使用異步編程,即使如此也不會是真正的併發性,但是來自人類POV,是的,它會同時運行。與1進程/請求相比,它會佔用更少的內存。 – DrakaSAN

+0

你應該做的是去看看node.js和驅動它,你會明白爲什麼一個進程是足夠的。 PHP和node.js實際上是兩種不同的野獸,並以完全不同的方式工作。 – DrakaSAN

相關問題