2015-09-23 22 views
14

Mặc dù đã từng là tài liệu rất tốt để sử dụng ổ cắm, nhờ vào Irl Nathon's Sails Cast series. Mọi thứ đã thay đổi trong v0.11, với các cánh buồm đóng gói và chôn lấp các thói quen socket.io.Sử dụng socket.io với buồm js

Trang web buồm ví dụ: SailsSocket rất ngắn gọn, hãy nói phải làm gì, nhưng không phải cách thức hoặc nơi cần làm, hoặc nếu tôi cần npm hoặc bower điều gì đó. Điều này đặc biệt bực bội khi cố gắng sử dụng sails.config.sockets nói về trang web buồm. Mà tôi thậm chí không thể tìm thấy trong thư mục v0.11 của tôi.

Trước tiên, tôi muốn biết cách thức và địa điểm tạo phản hồi của riêng mình cho io.socket.get hoặc .post hoặc bất kỳ điều gì. Ngay bây giờ khi tôi làm một get với một cái gì đó như:

`io.socket.request({ 
    method: 'get', 
    url: '/sites/2', 
    params: {}, 
    headers: {} 
},function serverResponded(body, JWR){console.log("Body: ", JSON.stringify(body,null, 4)); console.log(' JWR: ', JWR.body)});' 

tôi nhận được trở lại:

undefined 
VM1149:7 "Not implemented in core yet" 
VM1149:7 JWR: Not implemented in core yet 

tôi có thể xem các trang web được gọi trong những cánh buồm console, nhưng không đi qua.

Tôi tin rằng đó là vì tôi đã xác định các tuyến đường của riêng mình và có chức năng tìm kiếm của riêng tôi: trong trình điều khiển trang web của tôi và tôi cần phải đẩy thứ gì đó vào ổ cắm phía máy chủ. Nhưng tôi bối rối như thế nào tôi gọi một trang toàn bộ với HTTP và chỉ là các bảng với socket.io trong cùng một thói quen điều khiển.

  • Nơi nào tôi viết ở mức độ thấp của riêng tôi socket.io thói quen đó có thể được gọi từ một trang web?

  • Tôi vẫn làm điều đó trong tệp app.js?

Sails Truyền cho thấy nó đang được thực hiện ở đó, nhưng một lần nữa mọi thứ đã thay đổi.

+0

Có thể [this] (http://stackoverflow.com/questions/40021125/sails-io-js-io-socket-get-user-not-implemented-in-core-yet/40027253#40027253) trợ giúp về chuỗi bạn? Tôi nghĩ rằng câu hỏi khá giống nhau ... –

+0

xin vui lòng cung cấp thêm thông tin như thế nào bạn cấu hình móc buồm của bạn –

Trả lời

0

Sails "yêu cầu ảo" (cái mà họ gọi là yêu cầu HTTP-ish dựa trên socket.io này) thường được sử dụng để truy xuất hoặc đăng dữ liệu JSON lên máy chủ. Ngoài ra, nếu tập lệnh phía máy khách tạo yêu cầu ảo, máy chủ có thể thêm hoặc xóa ổ cắm yêu cầu đến/từ phòng.

Lưu ý rằng việc sử dụng "phương pháp ảo" cuối cùng sẽ chạy cùng một hành động điều khiển, nhưng sẽ đặt req.isSocket = true.

Ví dụ này là một cái nhìn mà ám một cái nhìn cho các yêu cầu HTML muốn nhưng trả về JSON dữ liệu cho các yêu cầu ổ cắm-based:

... 
// 'get /sites/:id': 'SomeController.showSite' (should be put in your `routes.js`) 
showSite: function(req, res) { 
    // load something from the database 
    Site.findOne(req.param('id')).exec(function(err, site) { 
    // handler errors (same for HTTP or sockets) 
    if (err) return res.serverError(); 
    if (!site) return res.notFound(); 

    if (req.isSocket) return res.json(site); // render JSON response for our `site` object 
    else return res.view('sites/show', {site: site}); // render an HTML view 
    }); 
} 

Đối với cấp thấp socket.io, cánh buồm cung cấp các biến toàn cầu io (từ sails.io.js), là một thể hiện của SailsSocket. Nó cho phép bạn thực hiện "yêu cầu ảo" HTTP-ish. Thông tin thêm here (mặc dù có vẻ như bạn đã đọc tất cả ở đó là để đọc về SailsSocket :). Bạn có thể truy cập ứng dụng khách socket.io cơ bản với io.socket._raw.

// do this in the browser. 
// sails.io.js should be included in layout.ejs by default. 
io.socket.get('/site/2', console.log); // "virtual request" 
// neat little trick  ^^^^^^^^^^^  for testing :) 
var rawIO = io.socket._raw; 
rawIO.emit('some:event', "using native socket.io"); 

Hy vọng điều này sẽ hữu ích!

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