Thảo luận về vấn đề viết ứng dụng chat realtime



  • Mình đang xây dựng chức năng chat cho trang web quản lý nhân viên.kiểu như là nhân viên A đăng nhập vào website thì sẽ có một list nhân viên show ở phía phải(tương tự như danh sách bạn bè của facebook ấy).Người này có thể chat giống như trên facebook,vậy mình muốn hỏi có thể sử dụng các công nghệ nào để xây dựng.Hay nói đúng hơn là mình cần tư vấn để lựa chọn công nghệ nào ấy,mình đang tìm hiểu cái MQTT để viết nhưng không biết có đúng hướng không?mong mọi người giúp ạ!



  • Nếu hiểu về NodeJS thì bạn dùng Socket.IO :
    https://socket.io/ (trong đây code example chat application. Bàn làm kiểu một directive hay một component với nó)

    Nếu lười phát triển toàn diện từ web server abcxyz thì thằng này:
    https://www.meteor.com/
    Dùng meteor để viết chat app: https://www.codementor.io/codeforgeek/getting-started-with-meteor-build-sample-app-du107r3o2

    :))). Còn lại bạn tự tìm hiểu để map vào cái app mà bạn đang viết cho đúng thôi.

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    2


  • said in Thảo luận về vấn đề viết ứng dụng chat realtime:

    MQTT

    Với bạn đan tập tìm hiểu thì đọc web socket + server sent event trước. Sau đó mới hiểu rồi dùng socket.io để viết thử. Còn nếu muốn nhanh thì mình khuyến khích meteor. Vì nó thực sự rất nhanh trong việc viết ra phần mềm.

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • giả sử khi nhân viên A chat với nhân viên B,chỉ cần click vào tên nhân viên B sẽ hiện ra một bảng chat giữa 2 người,nếu 2 người đó đã trò chuyện với nhau rồi thì show luôn dữ liệu cũ ra ấy.Nói chung giống y như chat trên facebook.Mình viết được server sử dụng socket.io để bắn thông báo cho nhân viên rồi.



  • H thì mình break ván đề bạn ra nhé.

    "Sẽ hiện ra một bảng chat giữa 2 người" : Đoạn này là code client web rồi. Sử dụng chat room của socket IO. Vì ban nói được là bạn đã noti được cho nhau. Thì chuyện gửi tin nhắn cho nhau thì chỉ cần viết một key tín hiệu cho send nữa thôi.

    "nếu 2 người đó đã trò chuyện với nhau rồi thì show luôn dữ liệu cũ ra ấy": Đoạn này chỉ là query database theo id của room trò chuyện thôi. Khi họ click vào một room. Họ có một action là bật room -> Gửi một restful lên server query hết data chat. sau đó tiện thể join họ vào room chat A-B. Lúc này khi dugnf socket để send thì ở trên server bạn lưu những thứ chat vào db thôi.

    Tổ chức cơ bản collection DB có thể như nhau:

    from: id nguwofi gửi
    to: id người nhận
    context: nội dung
    type: ví dụ images text video
    id_room: id của room chat (thường thì chả có cái này. Vì tạo room 2 người thì bạn chỉ cần lấy id ghép lại alf unique rồi :)) cái này là tùy bạn tổ chức)

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • À quên. Bạn có thể dùng thằng này:

    • https://socket.io/docs/rooms-and-namespaces/ Đọc nó bán sẽ nghĩ ra solution chỗ này. Còn lại flow thì mình thấy bình thường mà. Bạn cứ thử suy nghĩ là kết hợp giữa restful + socketio đi ^^. Ra rồi thì bạn thấy khá dễ viết.

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • à vâng,thế là dùng cái room của thằng socket.io có thể làm được đúng không bạn?Cám ơn bạn,mình sẽ nghiên cứu thêm cái room để làm :D



  • Chính xác là room là một trong những solution dễ nhất. Còn cái khác là bạn tự quản lý thì nó cần bạn tổ chức code tốt hơn. Nên thôi room là giải quyết được vấn đề của bạn rồi. Hehe. Sorry vì đã dài dòng =)))

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • Quan trọng là từ duy code Server của mình nữa đó.



  • Thử meteor đi bác.
    Em mới đọc xong tài liệu DiscoverMeteor nên cũng làm một cái dạng private chat để ôn lại kiến thức.
    Mày mò mãi cũng coi như là chat được với nhau, mặc dù vẫn còn gặp vài vấn đề (chắc do khả năng mình kém ^^)
    Ảnh demo đây ạ:
    ![alt text](0_1493085028140_upload-5e407076-502d-4aad-ab0a-adeaef79d555 image url)



  • cám ơn mọi người mình sẽ nghiên cứu thêm ạ!



  • Meteor thì quá nhanh trong việc phát triển application realtime. Chỉ là còn vấn đề về socket với mobile của meteor khá khó. Phải sử dụng GraphQL của facebook để giao tiếp với mobile. Phiên bản mới của Apollo GraphQL hỗ trợ realtime client apollo - server apollo rồi. Nên hoàn toàn là có solutions cho chat với mobile luôn :D.

    GraphQL: http://graphql.org/learn/
    Apolo GraphQL: http://www.apollodata.com/

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    1


  • Mà dùng GraphQL cũng có thể dùng như một lớp lưới cung cấp interface đầu vào. Và giấu được schema của server. :))). Nói chung khá thú vị và hay. Tìm hiểu rồi thì sẽ có người thích meteor cớ người không thích.

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • @Nguyen-Hien
    Em mới học về MEAN stack và đang tìm hiểu để làm ứng dụng web tin tức,
    anh có thể chia sẻ em hướng đi, cũng như ít kinh nghiệm được ko ạ.
    Em có tìm hiểu từ nhiều nguồn nhưng ko thông cho lắm.
    Em cảm ơn.



  • @Lê-Văn-Hoàng Bạn có thể tiếp cận bằng cuốn sách này. Đa số project trong đó là khá sát với thực tế sẽ làm việc. Cái này là cách tiếp cận nhanh thôi. Chứ mình cũng không thích.

    Còn hướng đi nghiêm túc thì hơi khó khăn:

    1. Nắm được đến mức JavaScript làm việc. Xử lí được Async, Sync, sử dụng lib Promise, Async A+
    2. Đọc offical Node (Đọc xem nó hỗ trợ gì. Mình cần gì)
    3. Viết project thực tế theo cuốn sách này : https://github.com/thinkphp/nodejs-books/blob/master/public/Node.js in Action.pdf
    4. Dùng thử các framework mỏng nhẹ như express. Dùng nó làm 1 app chat, app tin tức thử.
    5. Tập mấy cái devops kiểu docker , config proxy, config DB.
      P/S. Đi làm + ăn hành =)))))))).

    Nguyen (Rodgers) Hien.
    Sent from Wood-PC.

    0


  • @Nguyen-Hien Vâng, để em nghiên cứu ạ, tại trc học php thì dễ, giờ sang nodejs khó vì toàn tài liệu tiếng anh, e lại dốt tiếng anh nữa :(



  • cái gì cũng nên đi lên từ căn bản điển hình như mình từng là 1 người mất căn bản, chỉ chú trọng vào làm những gì mình thích và kết quá đến khi muốn tự viết 1 thứ gì đó cho sở thích của mình thì lại không có căn bản ban đầu nên phải tự học lại căn bản :))
    khuyên bạn nên tìm hiểu và học căn bản trước khi chạy theo ý tưởng, vì ai cũng phải bò rồi mới biết đi rồi tời chạy.



  • Bạn tìm hiểu socket IO rồi tạo ra cái như vầy nó hay hơn. Mình tạo 1 cái chat đơn giản, có gửi hình, sắp tới làm thêm WEB RTC để gọi cho nhau nữa. Còn cái lưu lịch sử thì khi client truyền về server, bạn lưu trước rồi get ra lại gửi lên lại client, khi đó tin nhắn sẽ ko bị mất. Khi show ra tin nhắn thì bạn show ra tầm 10 tin thôi, và khi đọc tin nhắn cũ thì họ phải kéo lên, bạn dùng sự kiện scroll để show ra tiếp 10 tin cũ tiếp theo, như vậy sẽ ko nặng.
    0_1497071444058_Capture.JPG


Log in to reply