2012-05-10 25 views
5

Tôi sẽ xây dựng một ứng dụng web để quản lý các ghi chú (nghĩ về một cái gì đó tương tự như Evernote). Tôi đã quyết định sử dụng Backbone.js + phía máy khách JQuery. Phía máy chủ, tôi chưa quyết định: hoặc là PHP thuần túy (mà tôi biết rất rõ) hoặc Node.js + Socket.io (hoàn toàn mới đối với tôi).Node.js và Socket.io - chúng có thể đi được bao xa với các ứng dụng web thời gian thực?

Tôi đang xem xét Node.js + Socket.io vì tôi muốn ứng dụng web của tôi là thời gian thực (ví dụ: nếu người dùng cập nhật ghi chú, ghi chú đó sẽ được cập nhật ngay lập tức cho cộng tác viên chia sẻ ghi chú đó, mà không cần tải lại trang).

Tôi cũng đang xem xét, thay thế thứ ba, sử dụng Node.js và Socket.io cho giao diện người dùng và PHP cho API REST (tôi cảm thấy thoải mái hơn khi xây dựng một API với PHP). Mã PHP và Javascript sẽ chia sẻ cơ sở dữ liệu MongoDB.

Câu hỏi của tôi là: nếu tôi phát triển API REST cho ứng dụng web của tôi bằng PHP và ghi chú mới cho người dùng được tạo thông qua API (ví dụ: ứng dụng Android gửi yêu cầu API để tạo ghi chú đó), sẽ Node.js, Socket.it và Backbone.js có thể cập nhật ngay lập tức giao diện người dùng của người dùng và hiển thị ghi chú mới trên màn hình của họ? Tôi nghĩ rằng có thể được gọi là "thông báo đẩy".

Tôi hy vọng tôi đã đủ rõ ràng.

Ngoài ra, có bất kỳ công nghệ nổi bật thay thế nào để tạo các ứng dụng web thời gian thực không?

Trả lời

9

Có Node.js + Socket.IO sẽ thực hiện công việc này rất tốt. Nút sử dụng vòng lặp sự kiện, điều này có nghĩa là một yêu cầu được nhập vào hàng đợi. Nút giao dịch với các yêu cầu này từng người một. Các máy chủ web truyền thống đối phó với phương pháp 'Đề xuất cho mỗi yêu cầu' trong đó một luồng được tạo để xử lý các yêu cầu đó.

Lợi ích của nút ở đây là nó không cần phải chuyển ngữ cảnh thường xuyên, điều này có nghĩa là nó có thể xử lý các yêu cầu này rất nhanh ... có khả năng nhanh hơn máy chủ PHP của bạn. Tuy nhiên Node chạy như một quá trình duy nhất, trên một lõi CPU. Nếu ứng dụng của bạn là CPU chuyên sâu, nó có thể là nó chặn, có nghĩa là thời gian cho mỗi yêu cầu sẽ chậm hơn.

Tuy nhiên, âm thanh với tôi như ứng dụng của bạn không phải là CPU chuyên sâu, nghĩa là Node.js sẽ hoạt động tốt.

Quyết định Nếu thời gian của bạn bị giới hạn và bạn không muốn học kỹ năng mới (Nút), PHP sẽ ổn. Nếu bạn có thời gian tôi khuyên bạn nên học Node.js, vì nó rất mạnh khi nói đến các nhiệm vụ chuyên sâu I/O như REST API để tạo Ghi chú.

Cập nhật giao diện người dùng Nếu mục đích sử dụng của bạn thông qua thiết bị di động, tôi khuyên bạn nên sử dụng WebSockets nhưng có dự phòng như bỏ phiếu dài. Có thể cập nhật giao diện người dùng máy khách bằng cách sử dụng nút hoặc PHP. Tuy nhiên từ kinh nghiệm của tôi, việc sử dụng Socket.IO trên Node.js. trở nên dễ dàng hơn nhiều.

Ví dụ Cập nhật ứng dụng khách bằng Node.js/Socket.io

Client-side

socket.on('new-note', function (data) { 
    placeNewNote(data); 
    }); 

Server-side

socket.emit('new-note', data); 

Bắt đầu với Node: How do I get started with Node.js

Xin lưu ý, nếu bạn muốn xây dựng một ứng dụng Android dành cho thiết bị di động gốc sử dụng WebSockets ... bạn sẽ cần phải sử dụng: Java socket.io client

+0

Jack, cảm ơn câu trả lời của bạn. Và những gì về thời gian thực? Liệu một thay đổi thông qua REST API được thực hiện với PHP có được phản ánh trong giao diện người dùng ngay lập tức không? – dan

+1

Tôi đã thêm một số thông tin về việc cập nhật giao diện người dùng. Dự án năm cuối của tôi ở trường đại học rất giống với những gì bạn đang tạo ... Tôi đã sử dụng Node.js/Express/Socket.IO và lưu trữ 'Notes' trong cơ sở dữ liệu MongoDB. – Jack

+0

Tuyệt vời! Và bạn quản lý để có được tất cả mọi thứ làm việc theo thời gian thực? – dan

2

Sử dụng Node.js cho cả máy chủ web và máy chủ đẩy tất nhiên là cách tốt nhất. Đặc biệt là kể từ khi bạn sẽ sử dụng Node.js dù sao thì bạn phải học nó, vì vậy việc học cách làm cho một máy chủ web chỉ là tự nhiên (tôi khuyên sử dụng nổi tiếng nhất Express framework).

Bây giờ bạn có thể sử dụng PHP cho máy chủ web và Node.js cho máy chủ đẩy. Để làm cho chúng giao tiếp với nhau, bạn có thể muốn thêm Redis vào ứng dụng của mình. Redis sẽ cho phép bạn đẩy các thông báo đến bất kỳ máy khách nào được kết nối với nó, như máy chủ PHP hoặc máy chủ đẩy Node.js (và nó có thể cân bằng tốt). Từ đó, máy chủ push sẽ đẩy dữ liệu đến trình duyệt của khách hàng.

Công nghệ thay thế sẽ là ví dụ Twisted server. Tất nhiên bạn sẽ cần phải học Python để sử dụng nó. Và tôi không biết liệu nó có hỗ trợ WebSockets đúng cách hay không. Tôi nghĩ bạn nên gắn bó với Node.js + socket.io.

+0

Cảm ơn freakish. Vì vậy, bạn đang nói rằng nếu tôi lấy PHP ra khỏi phương trình và xây dựng trên Backbone, Node, Socket.io tôi KHÔNG cần Redit để có một ứng dụng web thời gian thực. Có đúng không? – dan

+0

IS Thể hiện sự thay thế cho Backbone.js? – dan

+1

@dan Yeah, về mặt kỹ thuật bạn không cần nó. Nhưng bạn nên sử dụng nó anyway, kể từ socket.io là không thể quy mô cho nhiều máy mà không có nó (hoặc ít nhất là tôi không biết cách khác để quy mô nó). Vì vậy, bạn nên sử dụng Redis, trừ khi bạn cho rằng một máy sẽ đủ cho ứng dụng của bạn. Nhưng bạn không nên đưa ra những giả định như vậy. :) – freakish

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