2009-10-16 32 views
7

Tôi đã viết một ứng dụng web nhỏ về cơ bản là ứng dụng trò chuyện được hỗ trợ JQuery trong trình duyệt, để nhận các bài đăng tôi đang bỏ phiếu cho máy chủ với yêu cầu AJAX và sau đó thêm bất kỳ trả lời mới nào lo lắng về việc làm điều này hiệu quả nhất có thể trong khi không làm mất cảm giác thời gian thực.Hiệu ứng băng thông bỏ phiếu trò chuyện Ajax

http://darklightweb.co.uk/RealTime/

Tôi không thể nhìn thấy bất cứ cách nào mà ngắt có thể xảy ra vì vậy tôi bỏ phiếu một trang mỗi 5 giây mà trả về không có gì nếu không có bài mới có sẵn để giữ cho dữ liệu chuyển xuống nếu nó nhàn rỗi, nếu nó có một thông điệp tin nhắn hàng đầu trong hàng đợi được gửi đi và tôi đang kiểm tra lại ngay sau khi yêu cầu Ajax đã kết thúc cho đến khi hàng đợi tin nhắn trống.

Bất kỳ mẹo nào khác về việc thực hiện điều này là băng thông thấp nhất có thể hoặc có thể triển khai thay thế?

Trả lời

11

Bỏ phiếu có thể không phải là giải pháp tốt nhất để thực hiện trò chuyện - tôi khuyên bạn nên xem JQuery's implementation của COMET để giữ kết nối mở với máy khách và đẩy cập nhật từ máy chủ 'xuống' và cũng là quite scalable.

+0

Tuyệt vời, thankyou rất nhiều. – Baxter

+4

Có ai biết nếu Stack Overflow sử dụng bỏ phiếu để tìm ra các cập nhật như "2 câu trả lời mới đã được thêm vào - bấm vào đây để hiển thị chúng" trong khi bạn đang gõ câu trả lời của riêng bạn? Hay nó sử dụng một số loại hệ thống "đẩy" như sao chổi? –

4

Tôi nghĩ rằng đối với một ứng dụng chat bạn có thể sử dụng

Reverse Ajax

Xếp Ajax đề cập đến một thiết kế mẫu Ajax sử dụng tồn tại lâu dài HTTP kết nối để cho phép độ trễ thấp giao tiếp giữa máy chủ web và trình duyệt. Về cơ bản, đó là cách thức của gửi dữ liệu từ máy khách đến máy chủ và một cơ chế để đẩy dữ liệu máy chủ trở lại trình duyệt. 1

truyền server-client này có một trong hai hình thức:

* Client polling, the client repetitively queries (polls) the 

máy chủ và chờ đợi một câu trả lời. * Máy chủ đẩy, kết nối giữa máy chủ và máy khách được giữ mở, máy chủ gửi dữ liệu khi có .

Reverse Ajax mô tả việc thực hiện một trong các mô hình này hoặc kết hợp cả hai. Mẫu thiết kế còn được gọi là Ajax Đẩy, Full Duplex Ajax và Streaming Ajax.

moo-comet

Request.Comet là một lớp javascript đơn giản để tạo trình duyệt chéo Comet (Reverse Ajax) các ứng dụng một cách dễ dàng. Nó cung cấp truyền dữ liệu thời gian thực giữa máy khách và máy chủ và có thể được sử dụng với bất kỳ ngôn ngữ phía máy chủ nào.

+0

cũng có thực hiện đảo ngược ajax (Comet) cho JQuery, do đó, sử dụng moo-sao chổi có thể không thuận tiện như Baxter đang sử dụng JQuery anyway (xem câu trả lời của tôi cho liên kết) – msparer

+0

Cảm ơn, câu trả lời hay nhưng tôi thích gắn bó với một khung công tác JS. – Baxter

1

Tôi đã viết gần như CHÍNH XÁC cùng một ứng dụng để tạo điều kiện giao tiếp giữa bạn bè tại nơi làm việc khi nhiều nhà tuyển dụng sử dụng lọc web draconian.

Tôi nhận thấy rằng lượng dữ liệu được chuyển cho các yêu cầu bỏ phiếu này là tối thiểu và hiếm khi tiếp cận 1kb/giây cho mỗi người dùng đã đăng nhập, thường ít hơn vì bạn chỉ bỏ phiếu cho 5s.

Băng thông có thực sự là vấn đề hoặc bạn có tối ưu hóa sớm không?

+0

"bạn có tối ưu hóa sớm không?" Đã bị hỏng. – Baxter

1

Nếu bạn quyết định không đi với cách tiếp cận COMET, sau đó tôi sẽ làm tương tự như bạn làm, ngoại trừ nếu hàng đợi chứa nhiều thư thì chúng được gửi cùng một lúc. Bằng cách này bạn chỉ thăm dò ý kiến ​​chính xác sau mỗi 5 giây và không còn nữa (và không ít hơn). Tất nhiên, với 100 người kết nối điều này vẫn dẫn đến 20 yêu cầu mỗi giây, vì vậy bạn nên thử và tối ưu hóa phía máy chủ theo cách mà mỗi yêu cầu mất ít tài nguyên máy chủ (CPU/RAM/thời gian) nhất có thể. Caching là bạn của bạn ở đây.

Tôi sẽ không lo lắng về băng thông bởi vì các tin nhắn trò chuyện thường rất ngắn và các yêu cầu của bạn sẽ rất nhỏ.

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