如何在PHP中实现高性能异步套接字服务器应用程序


How to implement a high performance asynchronous socket server application in PHP?

使用nodejs,创建非阻塞TCP服务器非常容易。来自nodejs.org的示例:

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()-/poll()-/epoll()这些东西,套接字例程和主循环是用C实现的,所以它非常快速和高效。

nodejs是伟大的,但我想实现一个高性能的TCP套接字服务器在PHP,因为我是一个PHP家伙:)

所以,我已经尝试过的一件事是在PHP中实现套接字例程,socket_create_listen, socket_accept, socket_select等和PHP中的主循环。这工作得很好,但我不认为它是非常有效的,因为我必须使用socket_select调用c -函数select内部,但epoll会更好,我认为(我使用Linux),但epoll不可作为PHP函数。(phpsocketdaemon和phpmio是我发现的为您实现套接字例程的两个项目)。

是否有可能以nodejs的方式做到这一点?我正在考虑一个PHP模块,在C中实现循环和套接字例程,并为事件调用PHP回调函数(onread, onerror ..)。还是不值得付出努力?

我认为这是一个典型的"如果你只有一个锤子,那么所有的东西看起来都像钉子"的例子。

正如您自己已经发现的那样,php不是适合这项工作的工具。你也许可以找到一种方法来做这件事,但它很可能会很乱。

所以使用正确的工具来完成任务。你不会用锤子把螺丝钉在墙上吧?