10/10/2018, 11:10

giúp với php ajax chat

mình sắp phải làm php , ajax chat . là 1 part của 1 website nhiều thành viên , mà hok có nhiều kinh nghiệm về phân tích , đánh giá , tính toán để đảm bảo app làm việc tốt khi có nhiều thành viên sử dụng nên mong mọi ng có thể chia sẻ tí.

yêu cầu là chat live , delay từ 1-2 second. user sẽ chọn friend trong user list để chat . nói chung là multi chat.

về phần jquery , giao diện thì ko có j khó khăn.

khó khăn là :
- xây dựng table như thế nào , record nội dung chat ra sao cho hiệu quả ?
- về các thuật toán để lấy dữ liệu như thế nào để hiệu quả nhất , đảm bảo đủ thông tin mà lấy dữ liệu nhan nhất ?
- làm sao đo lường được tốc độ xử lý và lượng dữ liệu truyền tải trên mỗi lần request nhỉ? mình biết tốc độ xử lý nhanh thì tốt , nhưng nếu bắt nó chở quá nặng thì dù nhanh cũng đúi.
- có công nghệ nào hỗ trợ cho chat tool dạng này ko nhỉ?

mình test cái chat tool của facebook thì thấy cực nhanh, hok bik nó có những gì mình có thể làm dc ?

bà con chia sẻ với nhé , thanks

[=========> Bổ sung bài viết <=========]

hiện tại suy nghĩ của mình để lưu chat massage thì lưu trong 1 table.

- khi 1 người gửi 1 câu ,thì gửi lên server và lưu lại table.
- khi friend của người đó request đến thì delete cái massage đó luôn.

như vậy sẽ giảm lượng record trong table thường xuyên nên tránh tình trang table chứa quá nhìu record dẫn đến việc select ko nhanh.

Suy nghĩ thứ 2 là về request chat text. mỗi chat window sẽ lưu lại ID chat cuối cùng, mỗi lần auto request sẽ lấy ID đó và select các chat text mới hơn.

Suy nghĩ thứ 3 là về window chat . sẽ có nhiều window vì user sẽ có thẻ chat nhìu người. mỗi lần chỉ mở 1 window và các window còn lại bị đóng.
- các window đóng sẽ chỉ nhận request cho đến khi nhận dc 1 tin mới từ friend. nó sẽ ko request nữa mà dừng lại cho tới khi user mở window chat bị đóng đó . như vậy sẽ giảm khá nhiều lựong request. vì request sau mỗi 2s.
VnVision viết 13:13 ngày 10/10/2018
Bạn tìm hiểu về comet nhé:
http://en.wikipedia.org/wiki/Comet_%28programming%29

Về csdl nếu có server riêng hoặc VPS thì ko nên dùng mysql, theo mình ứng dụng loại này dùng redis đặc biệt thích hợp.
ngoc_viet08 viết 13:20 ngày 10/10/2018
Được gửi bởi VnVision
Bạn tìm hiểu về comet nhé:
http://en.wikipedia.org/wiki/Comet_%28programming%29

Về csdl nếu có server riêng hoặc VPS thì ko nên dùng mysql, theo mình ứng dụng loại này dùng redis đặc biệt thích hợp.
thanks bác , có server riêng chứ! comet là công nghệ đẩy à , nghe ghê ghê rồi đây

redis tích hợp vào ajax và php tốt chứ bạn?
VnVision viết 13:16 ngày 10/10/2018
Được gửi bởi ngoc_viet08
thanks bác , có server riêng chứ! comet là công nghệ đẩy à , nghe ghê ghê rồi đây

redis tích hợp vào ajax và php tốt chứ bạn?
comet là một kỹ thuật để tạo hiệu ứng push dữ liệu từ server đến client browser (thay vì client browser request/poll server như chúng ta vẫn biết)

redis là csdl, đặc điểm của nó là nằm trong RAM (và đồng bộ vào disk theo chu kỳ do mình thiết lập) nên tốc độ cực nhanh (như memcache bởi cũng h/đ trong RAM - thậm chí nhiều benchmark còn cho thấy nó nhanh hơn cả memcache). Ngoài ra nó hỗ trợ nhiều định dạng dữ liệu (thay vì chỉ là một key-value store như memcache) với nhiều operation hữu ích nên có thể xứ lý dữ liệu trong csdl 1 cách linh hoạt. Nói chung bạn sẽ ko phải lo lắng về vấn đề tốc độ của csdl nếu chọn nó (http://redis.io/topics/benchmarks). Mà trong chat app thì performance là 1 tiêu chí quan trọng hàng đầu.

Vì csdl cho 1 ứng dụng chat ko đòi hỏi nhiều tính năng của một relational DB nên theo mình dùng mysql trong trường hợp này là ko nên. Có rất nhiều giải pháp nosql tốt khác hiện nay.
xx3004 viết 13:18 ngày 10/10/2018
@ngoc_viet08: Mình có 1 cái Ajax chat = php nè, mình tự viết, đang bỏ dở cái mục quản lý thành viên cho cái chatbox, mà cái đó cũng lười viết quá, >"<. Hiện tại với chatbox của mình bạn có thể dùng template chat [ví dụ khi member tạo template chat là {MSG} [x] thì mỗi lần chat nó sẽ thêm chữ [x] vào cuối dòng], cho người dùng chọn delay load với dạng thanh trượt, ban nick theo IP, ban nick theo nickname, có thể cho guess chat, có thể quản lý thời gian tải của guess và của member. Có chức năng thêm moderators, emoticons, words filter, admin có thể delete dòng chat ko vừa ý, có hiển thị ngày tháng, có bảng riêng để lưu trữ dữ liệu, có thể tự tạo css cho chat...Đại loại vậy, bạn cần thì liên hệ nick Yahoo mình mình đưa cho, nếu wởn thì bạn phát triển tiếp cái mục quản lý thành viên và bbcode, hehe.

xx3004@yahoo.com
xx3004@gmail.com

[x]
ltnhuan viết 13:22 ngày 10/10/2018
Xài Joomla đi, có com ajax chat đó
anhnhv2812 viết 13:21 ngày 10/10/2018
Có chắc joomla làm được cái website theo yêu cầu của người ta không
VnVision viết 13:13 ngày 10/10/2018
Các php ajax chat thì từ lâu đã có rất nhiều script open source trên mạng, và việc tự code một script mới cũng không khó. Những script đó nếu chạy thử thì thấy rất ok, nhưng việc chúng có scale hiệu quả ko khi phải phục vụ cho một số lượng tương đối ng dùng online cùng thời điểm thì lại là vấn đề khác. Chính vì vậy nhiều dịch vụ host quy định không cho phép đặt chat box trên website vì sợ ảnh hưởng tới server.
chesterben viết 13:22 ngày 10/10/2018
Nếu đã chọn Redis thì ko nên dùng PHP cho máy chủ comet. Có thể dùng Tornado hoặc Twisted kèm theo, bởi vì đây là những công nghệ được tạo nên để chuyên làm các real-time application.
VnVision viết 13:12 ngày 10/10/2018
Đúng là apache ko thích hợp để làm backend server cho comet hay những nhiệm vụ yêu cầu giữ connection trong một thời gian dài. Ngoài Tornado hay orbited (sử dụng twisted), trc thấy vài người giới thiệu http://www.ape-project.org/
Bài liên quan
0