2015-12-11 16 views
5

Tôi hiện đang tạo ra một máy chủ socket.io ngang khả năng mở rộng trông giống như sau:ngang quy mô socket.io với redis

    LoadBalancer (nginx) 

     Proxy1  Proxy2  Proxy3  Proxy{N} 

BackEnd1 BackEnd2 BackEnd3 BackEnd4 BackEnd{N} 

Câu hỏi của tôi là, với ổ cắm-io redis mô-đun, tôi có thể gửi tin nhắn vào một ổ cắm cụ thể được kết nối với một trong các máy chủ proxy từ một trong các máy chủ phụ trợ nếu chúng được kết nối với cùng một máy chủ redis? Nếu vậy, làm thế nào để tôi làm điều đó?

Trả lời

3

Khi bạn sử dụng máy chủ socket.io và bạn đã sử dụng nginx làm cân bằng tải, đừng quên thiết lập sticky load balancing, kết nối đơn lẻ khác sẽ được kết nối với nhiều máy chủ dựa trên bộ cân bằng tải chuyển kết nối tới socket.io máy chủ. Vì vậy, tốt hơn để sử dụng sticky load balancing

Với bộ điều hợp io socket redis, bạn có thể gửi và nhận tin nhắn với một hoặc nhiều máy chủ socket.io với sự trợ giúp của Redis Pub/Sub implementation.

nếu bạn cho tôi biết công nghệ nào được sử dụng cho Proxy và chương trình phụ trợ, tôi sẽ cho bạn biết thêm thông tin về điều này.

+0

Tất cả các máy chủ sử dụng Node.js, tôi chỉ hỏi làm thế nào tôi có thể phát ra cho một khách hàng từ một trong các máy chủ phụ trợ miễn là chúng được kết nối với cùng một cửa hàng redis. –

2

Sử dụng mô-đun socket.io-redis tất cả các máy chủ phụ trợ của bạn sẽ dùng chung một nhóm người dùng được kết nối. Bạn có thể phát ra từ Backend1 và nếu một máy khách được kết nối với Backend4, anh ta sẽ nhận được thông báo.

Chìa khóa cho hoạt động này mặc dù với Socket.io là sử dụng các phiên dính trên nginx để khi khách hàng kết nối, nó vẫn nằm trên cùng một máy. Điều này là do cách mà socket.io bắt đầu với một WebSocket và một số chủ đề bỏ phiếu dài, tất cả chúng đều cần trên cùng một máy chủ phụ trợ để hoạt động chính xác.

Thay vì các phiên dính, bạn có thể thay đổi opton kết nối khách hàng của bạn chỉ sử dụng Websockets và điều này sẽ loại bỏ các vấn đề với nhiều kết nối tới nhiều máy chủ vì sẽ chỉ có một kết nối. Điều này cũng sẽ làm cho ứng dụng của bạn mất khả năng hạ cấp để bỏ phiếu dài thay vì WebSockets.

+0

Xin cảm ơn vì đã trả lời. Vì lý do nào đó, điều này vẫn không hiệu quả đối với tôi. Bạn có thể vui lòng xem chủ đề này và cho tôi biết cách tốt nhất để tiếp tục không? http://stackoverflow.com/questions/34325229/socket-io-wont-emit-from-other-server-using-socket-io-emitter –

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