2012-04-28 24 views
18

Tôi chỉ muốn đính kèm một số biến vào ổ cắm của mình, nhưng tôi không hiểu các phương thức .get và .set. Cả hai đều có một đối số thứ ba cho một cuộc gọi lại. Điều này có thể được bỏ qua? Nó là cái gì ?! Liệu các cuộc gọi lại chính nó intherit đối số?socket.io socket.set và socket.get - đối số gọi lại là gì?

Đoán tốt nhất của tôi là ở đó khi socket.io không sử dụng bộ nhớ nhưng đang lưu nội dung này ở nơi khác và cần kiểm tra lỗi khi gọi lại.

socket.on('set nickname', function (name) { 
    socket.set('nickname', name, function (arguments) { 
     doSomethingMysterious(); 
    }); 

Tôi đang sử dụng socket.io 0.9.x

Các hàm được định nghĩa trong socket.js

/** 
* Stores data for the client. 
* 
* @api public 
*/ 

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

Trả lời

12

setget là không đồng bộ. Cuộc gọi lại sẽ được gọi khi các thao tác này được hoàn thành. Bạn có thể bỏ qua nó, hoặc bạn có thể sử dụng nó cho bất kỳ mục đích nào bạn thích, không chỉ xử lý lỗi.

+0

Cảm ơn, thực tế là họ đang không đồng bộ làm cho nó dễ dàng hơn để quấn của tôi đầu xung quanh toàn bộ điều. Trong trường hợp thông thường, điều này sẽ được sử dụng để lưu các giá trị vào một db ở đâu đó và sau đó sử dụng một phát lại khác cho khách hàng để cho họ biết rằng nó được lưu? Tôi đoán nó vẫn chưa rõ ràng đối với tôi, ngoài sự va chạm không gian tên, tại sao chúng ta không thể sử dụng cái gì đó như 'socket.property = value;' Chỉ mới bắt đầu với node.js 2 ngày trước, xin hãy tha thứ cho sự thiếu hiểu biết của tôi! –

+2

Vâng, một lý do chính đáng tại sao bạn sẽ sử dụng 'set',' get' (như được chọn để tiết kiệm một giá trị trong một đối tượng), là lưu nó trong db. Trong thực tế 'socket.io' dường như đã có một bản dựng trong' redis store', nhưng tôi không phải là người dùng socket.io nên tôi không thể nói nó có thể được sử dụng như thế nào. Nếu bạn nhìn vào mã nguồn, khi gọi 'set', giá trị này sẽ đặt giá trị trong' store': https://github.com/LearnBoost/socket.io/blob/master/lib/socket.js#L246 – mihai

+0

và rằng .store theo mặc định là redis? Hoặc là nó chỉ thích hợp để bạn có thể thiết lập cửa hàng của riêng bạn? – Funkodebat

32

Các chức năng getset trên đối tượng ổ cắm were removed in version 1.x. Cách thích hợp để lưu trữ và lấy giá trị hiện nay là thông qua các thuộc tính trên đối tượng ổ cắm, như vậy:

socket.on('set nickname', function (name) { 
    socket.nickname = name; 
}); 

Như đã thấy trên example code from the official repo.

+0

Địa điểm này sẽ được lưu trữ ở đâu? Điều này sẽ được gửi đến khách hàng hoặc chỉ lưu trữ phía máy chủ? – C4u

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