Yêu cầu thg 7 8, 2018 1:28 CH 576 0 2
  • 576 0 2
0

Lỗi realtime với pusher laravel. Mong a/c có kinh nghiệm giúp đỡ

Chia sẻ
  • 576 0 2

Em đã cố gắng setup cả chiều nhưng toàn lỗi nên xin anh chị có kinh nghiệm giúp đỡ. EM làm theo hướng dẫn bên này. Ứng dụng có thể chat được. Nhưng nó hoàn toàn không realtime 😦(( https://pusher.com/tutorials/chat-laravel/

Nó hiển thị lỗi là sai thông tin liên quan đến key và cluster.

Pusher : Error :

{
  "type": "WebSocketError",
  "error": {
    "type": "PusherError",
    "data": {
      "code": 4001,
      "message":"Did you forget to specify the cluster when creating the Pusher instance?  App key 4aad83d7f51c03ef881c does not exist in this cluster."
    }
  }
}

Nhưng rõ ràng em thấy setup không thiếu 1 chỗ nào. Và cũng không sai đâu luôn. Khi tạo tài khoản ở pusher và đăng ký 1 app thì đã có đủ 4 thông tin như này.

app_id = "556863"
key = "4aad83d7f51c03ef881c"
secret = "532cb3c1cd41246d391d"
cluster = "ap1"

Em đã cấu hình nó trong .env. Cẩn thận hơn thì edit trực tiếp luôn cả các file app.js và broadcasting.php. Giờ vẫn không hiểu là do đâu luôn ạ. Thử đủ các cả chiều mà vẫn fail ạ 😦(

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=556863
PUSHER_APP_KEY=4aad83d7f51c03ef881c
PUSHER_APP_SECRET=532cb3c1cd41246d391d
PUSHER_APP_CLUSTER=ap1

Mong anh chị có kinh nghiệm trong tình huống này giúp em ạ 😦

Hình ảnh lỗi

2 CÂU TRẢ LỜI


Đã trả lời thg 7 9, 2018 1:28 SA
Đã được chấp nhận
+3

Lỗi 500 mình đoán đang có vấn đề ở controller. Bạn thử debug theo cách này xem.

B1. Dump cái biến $request ra xem có data gửi lên không.

B2. Xem đã make:Auth chưa.

B3. Vào file laravel.log đọc lỗi thay vì F12

Còn với chat realtime với pusher thì ý tưởng đơn giản thôi mình nghĩ bạn có thể tự làm được mà không phải đi clone.

Gửi message lên serve ảo Pusher theo cơ chế event của laravel. Bên js xử lí subscribe cái event message của mình. Có thể dùng jquere để append cái element có chứ nội dung message từ Pusher trả về. Tham khảo thêm tại https://trungquandev.com/laravel-pusher-tao-mot-ung-dung-web-thoi-gian-thuc/. Chúc bạn thành công 😄

Chia sẻ
Avatar Huu Hung @huuhung96
thg 7 9, 2018 2:25 SA

Ok bạn. Mình đã đọc qua bài viết của Trung Quân và hiểu cơ chế hoạt động cũng đã test thử thấy chạy OK. Chắc giờ mình sẽ dùng ajax để gửi POST lên controller để new event cũng như xử lý lưu dữ liệu luôn vào database. Cứ tưởng là dùng source code kia sẽ nhanh hơn vì cái này mình chỉ áp dụng 1 chức năng trong hệ thống của mình. Do thời gian gấp rút quá. Hóa ra lại mất thời gian hơn. 😦(

Có 1 điều mình thắc mắc là khi đụng đến cái này, nó dùng npm để cài đặt 1 số gói npm install --save laravel-echo pusher-js . Không biết khi lên hosting hiện này liệu có chạy được không?

Avatar Michael Scofield @simple1805
thg 7 9, 2018 2:47 SA

@quanlightning17 Tác giả đâu vào support bạn đi.

thg 7 9, 2018 7:08 SA

@huuhung96 nếu là đưa lên hosting thì bạn không phải lo, vì bạn sẽ ném cả source code lên, trong đó đã bao gồm 2 module laravel-echo và pusher-js mà bạn đã cài khi chạy ở local rồi. Còn nếu bạn dùng vps cài server thì mới có Terminal, và khi đó bạn mới cần để ý tới việc chạy lệnh trên server.

Avatar Huu Hung @huuhung96
thg 9 18, 2018 10:54 SA

@quanlightning17 Sẵn topic về vấn đề realtime này các cho mình hỏi thêm. Do đây là project của mình deploy, đã hoạt động được 1 vài tháng. Có lẽ vì số lượng người connect khá lớn mà pusher thỉnh thoảng nó rất hay bị lỗi, hoặc do gói free bị giới hạn gì đó. Nên mình đã chuyển qua dùng redis và socket io trong laravel. Một phần vì mình đã lâp trình nhiều với socket io và nodejs, khả năng realtime của socket io thì miễn bàn nên nếu laravel đã hỗ trợ thì mình muốn ứng dụng vào luôn.. Mình install hầu như đã hoàn tất ở môi trường localhost. Nhưng vấn đề giờ deploy lên vps của mình chưa biết phải làm như thế nào vì laravel hiện tại m đang chạy vps ubuntu (nginx) của digitalocean. Nodejs lại là 1 môi trường khác nginx, vậy giờ có phải nên built 1 server khác để setup riêng nodejs và redis trên đó. Rồi từ laravel cấu hình remote sang? Liệu rằng laravel có hỗ trợ cấu hình redis qua IP server khác? Bạn nào đã từng xử lý xin cho mình hướng đi. Cám ơn các bạn!

thg 9 19, 2018 12:44 SA

@huuhung96 uh bạn sẽ phải build một con server khác để chạy riêng nodejs & socketio trên đó, chuyên xử lý tác vụ real-time, còn việc cấu hình thì bạn phải nghiên cứu thêm rồi vì mình chưa từng làm cách này.

Avatar Tran Duc Thang @thangtd90
thg 9 19, 2018 2:06 SA

@huuhung96 Bạn hoàn toàn có thể cài đặt và chạy server nodejs (socket.io) trên cùng một server với server đang chạy Laravel (nginx) của bạn mà. 🤔

Bạn chỉ cần cài các package nodejs cần thiết, cùng với đó là sử dụng một process manager để quản lý tiến trình chạy server socket.io của mình là được. Bạn có thể tham khảo pm2, một Nodejs process manager rất phổ biến và được dùng nhiều trên production.

Do nginx với server nodejs sẽ lắng nghe ở 2 port khác nhau, nên chúng không ảnh hưởng gì đến nhau cả, bạn có thể khởi chạy chúng đồng thời trên 1 server mà không có vấn đề gì đâu 😉

Đã trả lời thg 7 8, 2018 2:46 CH
+8

Vấn đề là ở lỗi 500 xem là gì đã. Vì 500 là lỗi ở controller, còn cái pusher kia có thể không phải lý do chính.

Chia sẻ
Avatar Huu Hung @huuhung96
thg 7 8, 2018 3:14 CH

Cái này mình cũng đã check qua nhưng cũng không hiểu vì lý vì sao. Thử dùng postman post lên thì đúng là cũng out Nhờ bạn có kinh nghiệm xem qua giúp mình với. hehe.png

Avatar Bùi Hiếu @buihieubthc2rb
thg 7 8, 2018 3:19 CH

@huuhung96 bạn vào phần Network trên trình duyệt để xem rõ lỗi hơn ý

Avatar Huu Hung @huuhung96
thg 7 8, 2018 3:35 CH

@buihieubthc2rb Netwwork k thấy gì luôn bạn à. Cái này không biết có phải lỗi do gửi post lên mà không có token không nữa. Vì thấy laravel bắt buộc các form submit đều phải có token để bảo mật. Chứ thử test postman vào các router post thì toàn báo lỗi TokenMismatchException

Avatar Bùi Hiếu @buihieubthc2rb
thg 7 8, 2018 3:59 CH

@huuhung96 thế bạn k đặt csrf cho form mà vẫn lưu đc tin nhắn á (???)

Avatar Huu Hung @huuhung96
thg 7 8, 2018 4:05 CH

@buihieubthc2rb Do mình cũng chưa tìm hiểu về Vuejs lắm. DO đang cần gấp cái module chat này nên chưa tìm hiểu. Mà xem qua thì nó không có thẻ form luôn ấy. Mà không hiểu sao vẫn chui vào được database và nhận tin nhắn bình thường

Avatar Bùi Hiếu @buihieubthc2rb
thg 7 8, 2018 4:10 CH

@huuhung96 mình cũng có làm broadcast cho laravel rồi. Phần vue mình chỉ làm mấy hàng ở phần lắng nghe kênh thôi, chứ ở giao diện vẫn dùng blade bình thường, vẫn dùng thẻ form hoặc dùng form collective thôi mà.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí