2011-12-18 64 views
6

使用nodejs,創建非阻塞TCP服務器非常簡單。從nodejs.org例如:如何在PHP中實現高性能異步套接字服務器應用程序?

var net = require('net'); 
var server = net.createServer(function (socket) { 
    socket.write("Echo server\r\n"); 
    socket.pipe(socket); 
}); 
server.listen(1337, "127.0.0.1") 

處理的NodeJS的select() - /輪詢() -/epoll的()的東西給你,插座程序和主循環用C實現的,所以它的速度非常快,高效。

是的NodeJS偉大的,但我想在PHP中實現高性能TCP套接字服務器,因爲我是一個PHP的傢伙:)

所以,有一件事我已經嘗試過,是落實socket例程在PHP中,與socket_create_listen,socket_accept,socket_select等和PHP中的主循環。這工作得很好,但我不認爲它效率很高,因爲我必須使用socket_select,它在內部調用C函數select,但epoll會更好,我認爲(我正在使用Linux),但epoll不可用作爲PHP函數。 (phpsocketdaemonphpmio是我發現的2個項目,爲你實現套接字例程)。

它可以做到nodejs方式嗎?我正在考慮一個PHP模塊,它使用C語言實現循環和套接字例程,併爲事件調用PHP回調函數(onread,onerror ..)。或者是不值得的努力?

+2

/PHP中的高性能TCP套接字服務器/看起來像一個矛盾修飾,如果我看到過。 –

+2

儘管我是一位PHP粉絲,但實際上並不是爲這種用法而設計的。你可能可以在其中實現一個服務器,但我認爲以有效的方式進行這將是一個真正的壯舉。除非PHP經歷了一些重大的體系結構更改才允許使用此類用途,否則我會推薦使用更適合該任務的更適合的東西。 – GordonM

回答

2

我認爲這是一個典型的例子:「如果你只有一把錘子,一切看起來都像釘子。」

正如你自己已經知道的那樣,php不是正確的工具。無論如何,你可能會找到一種方法去做,但它很可能會很混亂。

因此,使用正確的工具進行工作。你不會用錘子把螺釘擰進牆裏,是嗎?

+1

更像是你不會騎悍馬而是騎馬。 –

+2

我同意PHP不是最好的工具。但是開發人員經常遇到無法控制代碼運行的服務器的情況,因此安裝nodej或其他替代方案可能不太可能。在我日常工作中,我經常遇到這樣的情況:我們編寫代碼並將它發佈給在自己的環境中部署它的客戶,我們所知道的是我們的代碼必須在標準PHP堆棧上運行。有時我們甚至無法訪問phpinfo()。我認爲保持客觀並在面前找到解決問題的辦法很重要。 – dnshio

相關問題