Ответ 1
Пароли "виртуальные запросы" (то, что они называют этим HTTP-ish-запросом на основе socket.io) обычно используются для извлечения или отправки данных JSON на сервер. Кроме того, если клиентская сторона script создает виртуальный запрос, сервер может добавить или удалить запрашивающий сокет в/из комнат.
Обратите внимание, что использование "виртуального метода" в конечном итоге приведет к одному и тому же действию контроллера, но установит req.isSocket = true
.
Этот пример представляет собой представление, которое отображает представление для запросов, требующих HTML, но возвращает данные JSON для запросов на основе сокетов:
...
// '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
});
}
Что касается низкоуровневого socket.io
, паруса предоставляют глобальную переменную io
(from sails.io.js), которая является экземпляром SailsSocket
. Он позволяет создавать "виртуальные запросы" HTTP-ish. Подробнее здесь (хотя, похоже, вы уже прочитали все, что нужно прочитать о SailsSocket:). Вы можете получить доступ к базовому клиенту socket.io
с помощью 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");
Надеюсь, это поможет!