2012-02-12 24 views

Trả lời

13

Gọi socket.foo đặt thuộc tính của bạn trên chính đối tượng socket. Điều này không được khuyến khích vì bạn có thể ghi đè một thuộc tính nội bộ mà socket sử dụng và phụ thuộc vào. Khi bạn gọi socket.set(), điều này được lưu trữ trong cấu trúc dữ liệu nội bộ sẽ không xung đột với các thuộc tính bên trong.

https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246

Socket.prototype.set = function (key, value, fn) { 
    this.store.set(key, value, fn); 
    return this; 
}; 
+0

+1 để bao gồm định nghĩa hàm! Vì vậy, nó chỉ là vấn đề tránh va chạm không gian tên? Bất kỳ lợi ích khác để sử dụng kho dữ liệu của họ? – knite

+0

Không xa như tôi biết, tôi đoán va chạm là điều chính. – JohnP

+11

Ngoài ra để mở rộng câu trả lời này, lý do cho phương thức get/set/del là chuyển khóa/giá trị cho adapter, theo mặc định đây là 'MemoryStore', nhưng bạn có thể dễ dàng thay đổi adapter thành mysql, redis, mongo Vân vân – RobertPitt

2

Tôi tin rằng lý do chính là vì vậy dữ liệu gắn vào ổ cắm an toàn đa quá trình.

Nếu ứng dụng của bạn là một quá trình, luôn là quá trình duy nhất và bạn chắc chắn mình không ghi đè thuộc tính nội bộ, socket.foo = bar sẽ ổn. Nó vẫn sẽ là tốt nhất để sử dụng get/set như là một vấn đề của tương lai-proofing và thực hành tốt nhất.

Trong một thế giới đa tiến trình, nếu bạn đặt socket.foo = bar trong một quá trình, thì trong một quá trình khác socket.foo sẽ không được xác định.

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