gpt4 book ai didi

node.js - 将socket.io与sails js一起使用

转载 作者:IT老高 更新时间:2023-10-28 23:03:43 30 4
gpt4 key购买 nike

虽然曾经有非常好的关于使用套接字的文档,但感谢 Irl Nathon's Sails Cast series . v0.11 中的情况发生了变化,sails 团队封装并隐藏了 socket.io 例程。

sails 网站 例如SailsSocket 简洁得令人发狂,只说要做什么,但不说如何做或在哪里做,或者我需要 npmbower 什么。尝试使用 Sails 网站上谈到的 sails.config.sockets 尤其令人沮丧。我什至在我的 v0.11 目录中都找不到。

首先,我想知道如何以及在哪里创建我自己对 io.socket.get.post 或其他任何内容的响应。现在当我得到类似的东西时:

`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)});'

我回来了:

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

我可以在 Sails 控制台中看到正在调用的站点,但没有任何反应。

我相信这是因为我已经定义了自己的路由并在我的站点 Controller 中拥有自己的 find: 函数,并且我需要手动将某些内容推送到服务器端套接字中。但是我对如何在同一个 Controller 例程中使用 HTTP 调用整个页面以及使用 socket.io 的表感到困惑。

  • 我在哪里编写可以从网页调用的低级 socket.io 例程?

  • 我仍然在 app.js 文件中做吗?

Sails Cast 显示它正在那里完成,但情况再次发生了变化。

最佳答案

Sails “虚拟请求”(他们称之为这些基于 socket.io 的 HTTP-ish 请求)通常用于检索 JSON 数据或将其发布到服务器。此外,如果客户端脚本发出虚拟请求,服务器可能会在房间中添加或删除请求套接字。

请注意,使用“虚拟方法”最终会运行相同的 Controller 操作,但会设置 req.isSocket = true

此示例是一个 View ,它为需要 HTML 的请求呈现 View ,但为基于套接字的请求返回 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,sails提供了全局变量io(来自sails.io.js),它是SailsS​​ocket的一个实例。它允许您发出 HTTP 风格的“虚拟请求”。更多信息 here (尽管您似乎已经阅读了有关 SailsS​​ocket 的所有内容:)。您可以使用 io.socket._raw 访问底层的 socket.io 客户端。

// 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");

希望这会有所帮助!

关于node.js - 将socket.io与sails js一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751011/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com