使用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不是适合这项工作的工具。你也许可以找到一种方法来做这件事,但它很可能会很乱。
所以使用正确的工具来完成任务。你不会用锤子把螺丝钉在墙上吧?