2011-12-18 26 views
6

Với nút lệnh, rất dễ dàng để tạo một máy chủ TCP không chặn. Ví dụ từ nodejs.org:Làm cách nào để triển khai ứng dụng máy chủ socket không đồng bộ hiệu suất cao trong 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 xử lý các lựa chọn() -/bình chọn() -/epoll() thứ cho bạn, những thói quen ổ cắm và các vòng lặp chính được thực hiện trong C, do đó, nó rất nhanh và hiệu quả.

nodejs là rất tốt, nhưng tôi muốn thực hiện một máy chủ socket TCP hiệu suất cao trong PHP, bởi vì tôi là một chàng trai PHP :)

Vì vậy, có một điều tôi đã cố gắng là để thực hiện các thói quen ổ cắm bằng PHP, với socket_create_listen, socket_accept, socket_select v.v ... và vòng lặp chính trong PHP. Điều này hoạt động rất tốt, nhưng tôi không nghĩ rằng nó rất hiệu quả, vì tôi phải sử dụng socket_select gọi hàm C select trong nội bộ, nhưng epoll sẽ tốt hơn tôi nghĩ (tôi đang sử dụng Linux), nhưng không có sẵn epoll như hàm PHP. (phpsocketdaemonphpmio là 2 dự án mà tôi thấy rằng triển khai các trình cắm thông thường cho bạn).

Có thể thực hiện điều đó theo cách nodej không? Tôi đang suy nghĩ về một mô-đun PHP mà thực hiện các vòng lặp và thói quen socket trong C, và gọi PHP chức năng gọi lại cho các sự kiện (onread, onerror ..). Hay nó không đáng để nỗ lực?

+2

/máy chủ socket TCP hiệu năng cao trong PHP/trông giống như một oxymoron nếu tôi từng thấy. –

+2

Giống như một fan hâm mộ PHP như tôi, nó thực sự không được thiết kế cho loại sử dụng này. Bạn có thể có thể thực hiện một máy chủ trong nó, nhưng tôi muốn nói làm một cách hiệu quả sẽ là một kỳ công thực sự. Trừ khi PHP trải qua một số thay đổi kiến ​​trúc lớn cho phép sử dụng loại này, tôi khuyên bạn nên sử dụng một cái gì đó phù hợp hơn với nhiệm vụ. – GordonM

Trả lời

2

Tôi nghĩ đây là trường hợp điển hình của "Nếu tất cả những gì bạn có là một cái búa, mọi thứ trông giống như một cái đinh."

Như bạn đã biết, php không phải là công cụ thích hợp cho công việc. Bạn có thể có thể tìm cách để làm điều đó anyway, nhưng nó rất có thể sẽ được lộn xộn.

Vì vậy, hãy sử dụng đúng công cụ cho công việc. Bạn sẽ không sử dụng một cái búa để lái một ốc vít vào tường, phải không?

+1

Giống như bạn sẽ không cưỡi với Humvee thay vì ngựa. –

+2

Tôi đồng ý rằng PHP không phải là công cụ tốt nhất cho việc này. Nhưng các nhà phát triển thường phải đối mặt với các tình huống mà họ không có quyền kiểm soát máy chủ mà mã chạy trên để cài đặt nodej hoặc một thay thế khác có thể không phải là một khả năng. Tôi trải nghiệm điều này rất nhiều trong công việc hàng ngày của tôi khi làm việc cho một cơ quan nơi chúng tôi viết mã và gửi cho khách hàng triển khai nó trên môi trường của họ và tất cả những gì chúng tôi biết là mã của chúng tôi phải chạy trên một chồng PHP chuẩn. Và đôi khi chúng tôi thậm chí không có quyền truy cập vào phpinfo(). Tôi nghĩ điều quan trọng là phải giữ khách quan và tìm ra giải pháp cho vấn đề trước mặt bạn. – dnshio

Các vấn đề liên quan