use*_*963 15 websocket node.js socket.io sails.js
虽然曾经有过非常好的使用套接字的文档,但感谢Irl Nathon的Sails Cast系列.事情在v0.11中发生了变化,sails团队包装并掩埋了socket.io例程.
帆船网站,例如SailsSocket令人抓狂,简单说明该做什么,但不知道如何或在哪里做,或者我需要npm或bower的东西.尝试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)});'
Run Code Online (Sandbox Code Playgroud)
我回来了:
undefined
VM1149:7 "Not implemented in core yet"
VM1149:7 JWR: Not implemented in core yet
Run Code Online (Sandbox Code Playgroud)
我可以看到在sails控制台中调用的站点,但没有任何结果.
我相信这是因为我已经定义了自己的路由,并且在我的站点控制器中有自己的find:function,我手动需要将某些东西推入服务器端套接字.但我很困惑,我是如何使用HTTP调用整个页面,而只是在同一控制器例程中使用socket.io调用表.
我在哪里编写自己的低级socket.io例程,可以从网页调用?
我还在app.js文件中做吗?
Sails Cast显示它在那里完成,但事情又发生了变化.
Sails“虚拟请求”(他们称之为基于 socket.io 的 HTTP-ish 请求)通常用于检索 JSON 数据或将 JSON 数据发布到服务器。此外,如果客户端脚本发出虚拟请求,服务器可能会向房间添加请求套接字或从房间中删除请求套接字。
请注意,使用“虚拟方法”最终将运行相同的控制器操作,但会设置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
});
}
Run Code Online (Sandbox Code Playgroud)
对于低级socket.io, sails 提供了全局变量io(来自 sails.io.js ),它是SailsSocket. 它允许您发出类似 HTTP 的“虚拟请求”。更多信息请参见此处(尽管您似乎已经阅读了有关 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");
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
924 次 |
| 最近记录: |