Lỗi login với module workforce



  • Chào mọi người, em là newbie ạ. Em vừa tạo một project với express. Em đã code xong phần đăng nhập với module Passportjs. Sáng nay em vừa tham khảo được là sử dụng module Workforce giúp chạy multicore cho nodejs. Thì vấn đề xảy ra khi em thêm module này vào project của em, là khi em đã đăng nhập được, load lại trang một vài lần là nó lại bị logout ra. Em kiểm tra điều kiện isAuthentication() thì nó báo false ạ. Có ai đã gặp vấn đề tương tự chưa ạ?



  • Mình nghĩ là vầy. Nodejs chạy 1 thread. Nếu chạy multi core thì có nhiêu node chạy. Nên khi chuyển core thì session sẽ không share. Nên một số request đi qua instance khác sẽ không thấy session. Bạn dùng 1 thằng store share session với các node là xong nhé.

    Dùng thằng này thử xem: https://github.com/tj/connect-redis
    Để đoạn code này trước phần app.use passport nha.

    var session = require('express-session');
    var RedisStore = require('connect-redis')(session);
    
    app.use(session({
        store: new RedisStore(options),
        secret: 'keyboard cat',
        resave: false
    }));
    

    Sent from Rodgers Zone!!!

    1


  • Vậy giả sử như với chỉ 1 core thì thì chạy được tầm bao nhiêu lượt truy cập một lúc nhỉ :D



  • @Phuocanh-Ta dùng thêm cluster đi thì chạy đc nhiều hơn



  • Mình không hiểu cái cluster đó lắm, không biết bạn có sách vở nào hướng dẫn kỹ về cái đó không, share mình với, chứ mình tìm trên mạng lóe mắt mà toàn nói qua loa đại khái không à. Mình vẫn đang dùng workforce, khá là đơn giản. Và vừa tìm được hướng giải quyết mới theo ý bạn @Nguyen Hien là lưu session vào database luôn. Không bk lưu vào database có gì nguy hiểm hơn là lưu với redis không nhỉ.



  • @Phuocanh-Ta Về cơ bản nếu ko share memory thì các node process đâu có biết nhau làm gì. Với cách trên của mình là lưu session vào redis. Bạn lên đọc nodejs.org. Đọc document offical là chuẩn nhất về cluster. Lưu vào redis đi bạn. Tốc dộ tốt hơn. Có expire time của key.

    Sent from Rodgers Zone!!!

    0

Log in to reply