2011-07-17 31 views
8

Tôi đã có một vài dự án được xây dựng bằng hookbox để quản lý thông điệp thời gian thực đi qua giữa máy khách và máy chủ web. Hookbox là tuyệt vời - nó hoàn toàn trừu tượng lớp vận chuyển, phơi bày một giao diện xuất bản/đăng ký đơn giản trên các kênh khác nhau với một hệ thống bảo mật thanh lịch.Thư viện web thời gian thực - thay thế hookbox bằng socket.io hoặc cái gì?

Thật không may là dự án hookbox đã nhanh chóng rơi vào tình trạng lộn xộn do sự không sẵn sàng của người bảo trì ban đầu thậm chí còn nỗ lực giải quyết quyền sở hữu. (Grrr!) Vì vậy, thật khó để xem nó là một nền tảng khả thi nữa.

Nền tảng tốt để cung cấp thông tin liên lạc theo thời gian thực với các ứng dụng web là gì? Yêu cầu:

  • Hoạt động dường như không có trình duyệt chéo, sử dụng thẻ web HTML5 hoặc COMET khi có sẵn. Lựa chọn vận chuyển nên ẩn với lớp ứng dụng. Tôi không quan tâm đến các trình duyệt cũ (IE6)
  • Truy cập của khách hàng từ cả hệ thống javascript và máy chủ (tức là trong php/python/ruby) - điều này là quan trọng
  • Cung cấp ẩn dụ đăng ký/đăng ký với tải trọng tùy ý
  • cho phép khách hàng để xem những gì khách hàng khác được kết nối với một kênh, tức là sự hiện diện
  • kiểm soát truy cập Fine-grained qua callbacks cho bất kỳ ứng dụng web (tốt đẹp để có)

tôi đã nghe ổ cắm đó. io có thể làm một số điều này, nhưng tôi có cảm giác rằng nó ở một lớp thấp hơn của ngăn xếp. Nó có thể kết nối với các thư viện không phải là javascript không? Làm auth?

Trả lời

2

Mặc dù tôi chưa thử, tôi bắt đầu xem xét Pusher cho mục nhập nút Knockout 2011. Ngoài JavaScript, nó hỗ trợ các khách hàng không js sau:

  • Objective-C
  • ActionScript
  • NET & Silverlight
  • của Ruby
  • Arduino

Nếu tin nhắn thông qua một bên thứ ba là một khả năng, bạn có thể thử dịch vụ miễn phí bằng cách sử dụng kế hoạch Sandbox của họ (20 kết nối & tối đa 100 nghìn tin nhắn/ngày) và xem liệu nó có đáp ứng nhu cầu của bạn hay không. (Tôi hơi không chắc chắn về yêu cầu "hiện diện", mặc dù nó có thể được đề cập trong tài liệu.)

+0

Nguồn mở sẽ tốt đẹp, như PHP & Python khách hàng, nhưng nếu không điều này có vẻ là những gì tôi đang tìm kiếm. Cảm ơn! – Leopd

3

Tôi đã có trải nghiệm rất tốt với NodeJSSocket.IO trong 8 tháng qua. Các thành phần phía máy chủ đã được rất ổn định cho tôi - Tôi có thể để nó chạy với một khối lượng tin nhắn rất cao và bộ nhớ cư dân của nó không bao giờ thực sự chồi trên 20MB. Cho đến nay tôi chỉ có thể để nó chạy trong khoảng 4 tuần mà không chấm dứt máy chủ, nhưng đó chỉ là vì tôi cần cập nhật mã phía máy chủ của tôi.

Trình duyệt dường như không có trình duyệt, sử dụng thẻ web HTML5 hoặc COMET khi có sẵn. Lựa chọn vận chuyển nên ẩn với lớp ứng dụng. Tôi không quan tâm về các trình duyệt cổ (IE6)

Cung cấp một xuất bản/đăng ký ẩn dụ với trọng tải tùy ý

Socket.IO cũng là một mảnh tuyệt vời của phần mềm. Nó dưới sự phát triển tích cực, và có một phong cách pub/sub trừu tượng đơn giản được xây dựng trong việc sử dụng các ngữ nghĩa EventEmitter (NodeJS) của 'on' (đăng ký) và 'emit' (xuất bản). Nó cũng rất minh bạch ở phía khách hàng về việc vận chuyển đang được sử dụng. Tôi đã sử dụng nó chủ yếu cho sự hỗ trợ WebSocket thẳng lên, nhưng nó có thể quay trở lại các ổ cắm Flash, xhr-polling và jsonp polling.

truy cập khách hàng từ cả hai javascript và hệ thống server-side (ví dụ: trong php/python/ruby) - điều này là rất quan trọng

NodeJS là JavaScript, chạy trên động cơ V8. Nó có một tấn của 3rd party modules cung cấp abstractions tốt đẹp cũng như interfacing với các thành phần bên ngoài, chẳng hạn như một cơ sở dữ liệu hoặc hàng đợi tin nhắn, trong số nhiều thứ khác. Theo như nhấn hệ thống với php/python/ruby, nó sẽ làm việc như với đánh bất kỳ máy chủ khác.Chọn phương thức giao tiếp của bạn (TCP/IP cơ bản, hoặc có thể là HTTP POST hoặc GET, hoặc thậm chí thông qua hệ thống tập tin) và NodeJS không thực sự quan tâm đến việc ai đang cung cấp dữ liệu. Cá nhân, tôi đã thực hiện một C# khách hàng đó là làm việc tuyệt vời.

Cho phép khách hàng để xem những gì khách hàng khác được kết nối với một kênh, tức là sự hiện diện

Nó không không có bất kỳ xây dựng trong logic 'hiện diện', mặc dù với việc xây dựng trong 'pub/sub 'logic đã có sẵn trong Socket.IO, tất cả những gì bạn phải làm là lưu trữ trạng thái trên máy chủ để máy khách mới có thể truy xuất dữ liệu hiện diện hiện có. Tôi đã triển khai pub/sub cơ bản của riêng mình trên máy chủ lưu giữ trạng thái và tất cả cùng nhau (bao gồm mã máy chủ NodeJS và các sơ đồ Socket.IO cơ bản) chỉ có 50 dòng JavaScript (bao gồm khoảng trắng).

kiểm soát truy cập Fine-grained qua callbacks cho bất kỳ ứng dụng web (tốt đẹp để có)

Không chắc chắn những gì bạn có nghĩa là bằng cách 'kiểm soát truy cập Fine-grained qua callbacks cho bất kỳ ứng dụng web (tốt đẹp để có) '. Pub/sub event/obsaphor ẩn dụ họ đã sử dụng gọi lại, vì vậy bạn móc các hành động cụ thể cho các sự kiện cụ thể.

Làm xác thực?

Tôi không cần, nhưng, để làm bất kỳ xác thực nào cho hệ thống của chúng tôi, vì vậy tôi không thể nói trực tiếp với nó. Tuy nhiên, nếu bạn duyệt các mô-đun NodeJS bạn sẽ thấy có nhiều mô-đun auth sẵn có, bao gồm LDAP và OAuth, chưa kể đến one module tuyên bố làm "OpenId, Google, OAuth, Twitter, LinkedIn, Yahoo, dễ đọc, Dropbox, Justin .tv, Vimeo, Tumblr, OAuth2, Facebook, GitHub, Instagram, Foursquare, Box.net, LDAP "

+0

Chắc chắn, khá dễ sử dụng bất kỳ ngôn ngữ nào để đăng thông báo vào hệ thống pub/sub bằng giao diện REST. Phần cứng và quan trọng là nhận được tin nhắn thời gian thực được đẩy tới một ứng dụng không phải là javascript. Việc gọi lại thời gian thực sang các ngôn ngữ khác yêu cầu thư viện khách hàng không tầm thường. – Leopd

0

Tôi recoment sử dụng node.js trong đó có rất nhiều thư viện cho những thứ khác nhau. Một thư viện để nhắn tin theo thời gian thực là now.js. Tôi không có nhiều kinh nghiệm với điều này nhưng đã thử nó và tôi sẽ nói nó làm việc tốt và có mọi thứ bạn nói bạn cần.

+0

Không giống như nó hỗ trợ bất kỳ khách hàng không phải là javascript hoặc có bất kỳ loại điều khiển truy cập nào. – Leopd

+0

Kiểm soát truy cập hầu hết có thể được quảng cáo bằng cách sử dụng các thư viện khác cho node.js. Khi tôi giải thích câu hỏi của bạn, bạn cần truy cập từ trình duyệt và chương trình phía máy chủ. Nếu bạn viết máy chủ của mình trong node.js, bạn có cả hai. Tôi đã hiểu lầm bạn chưa? – Godisemo

+0

Có, bạn đã hiểu lầm. Tôi đang tìm một giải pháp, không phải là một API cho phép tôi xây dựng một giải pháp. – Leopd

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