2013-04-16 28 views
5

Tôi có một ứng dụng web khá lớn được xây dựng với SproutCore và PHP làm chương trình phụ trợ. Những gì tôi muốn bây giờ là sử dụng websockets để cập nhật ứng dụng khách của tôi trong thời gian thực. Từ những gì tôi biết, PHP thực sự là xấu để xử lý các kết nối liên tục. Vì vậy, tôi đã nghĩ rằng tôi có thể sử dụng Go để xử lý các kết nối websockets và gọi kịch bản PHP của tôi mỗi khi một yêu cầu được nhận (điều này có nghĩa là package làm cho nó có thể). Vì vậy, câu hỏi đầu tiên của tôi là, các bạn có nghĩ đó là một ý tưởng hay không (và một ý tưởng khả thi, tôi đã không thể tìm thấy những người làm như vậy) hoặc tôi nên gắn bó với PHP? Không.PHP: sử dụng Golang để xử lý các kết nối websocket

Nếu tôi sử dụng Go để xử lý các kết nối ổ cắm web, tôi cũng nghĩ rằng tôi có thể dần dần chuyển từ PHP sang chỉ sử dụng Go (vì nó nhanh hơn rất nhiều so với PHP). Nếu tôi làm điều đó, tôi sẽ phải có khả năng gọi một số gói Go từ PHP. Điều này có thể được thực hiện với hàm PHP exec không? Có cách nào tốt hơn ? Và một lần nữa, đó là một ý tưởng tốt?

Trả lời

9

Đi là sự phù hợp tự nhiên đối với máy chủ websocket. Tôi đã xây dựng các máy chủ websocket trong Go và đã vô cùng hài lòng với cách nó tất cả làm việc ra ngoài. Tôi có một dịch vụ xử lý 300k người dùng một tháng trên máy chủ Go websocket và nó hầu như không sử dụng CPU 1% của một cá thể vi mô Amazon AWS. Không thể hạnh phúc hơn.

Các máy chủ web thực sự cần các khung điều khiển sự kiện như Go và Node.js để tối đa hóa tài nguyên máy chủ. Các quy trình web được phân nhánh như PHP tiêu thụ nhiều tài nguyên hơn một khung điều khiển sự kiện.

Nếu bạn cần gọi Go từ PHP tại một số thời điểm, tôi khuyên bạn nên sử dụng các cuộc gọi API. Mặc dù exec cũng sẽ hoạt động.

+0

Seem hứa hẹn. Vì vậy, bạn đồng ý với tôi rằng gọi một kịch bản PHP mỗi khi một yêu cầu được nhận bởi máy chủ websocket Go nên tốt hơn nhiều so với việc xử lý kết nối websocket tất cả trong PHP. –

+1

Tôi cũng sử dụng Go để chạy các máy chủ websocket của tôi (trong số đó [this] (http://dystroy.org:8004/). Nó rất hiệu quả và sạch sẽ.Tôi nghĩ rằng việc sử dụng PHP cho điều này thực sự sẽ là một ý tưởng tồi. –

+1

Gọi một kịch bản PHP mỗi khi một yêu cầu được nhận bởi máy chủ websocket Go sẽ gần như chắc chắn là một giải pháp tốt hơn, nếu bất kỳ dữ liệu nào của bạn có thể lưu trữ được, bạn có thể cache nó trong cá thể Go, cho một. đủ lâu để trả lời một yêu cầu để tổng số các quy trình PHP nên ít hơn đáng kể, miễn là các ổ cắm web không liên tục đẩy các yêu cầu mới tới PHP. – Daniel

-1

Đó là một câu hỏi cũ, nhưng hai của tôi cent về chủ đề này ...

Có một thư viện php rất tốt điều đó không chính xác những gì bạn đang yêu cầu - WebSockets. Nó được gọi là Ratchet. Tôi sẽ không sử dụng node.js (trên hyped) hoặc đi khi php có thể làm chính xác điều tương tự và nó là ngôn ngữ mà tôi cảm thấy thoải mái nhất. Trong phần lớn các trường hợp, hiệu suất tăng ít trên websockets không đáng để chuyển đổi stack.

liên kết hữu ích khác nếu bạn có kế hoạch sử dụng Ratchet:

+1

Ratchet được bảo trì rất kém và các ví dụ của chúng không hoạt động với các phiên bản mới nhất của PHP (5.5+).Mặc dù một ý tưởng tốt, với việc thực hiện hiện tại và mảng phụ thuộc lớn mà nó đòi hỏi, nó không hoạt động tốt. – dearsina

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