尽管过去有关于套接字的非常好的文档,但是要感谢Irl Nathon's Sails Cast series。随着帆团队包装并掩盖了socket.io例程, v0.11 发生了改变。

帆位,例如SailsSocket简明扼要,说的是做什么,但没有说明如何做或在哪里做,或者我是否需要 npm bower 。尝试使用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数据或将JSON数据发布到服务器。另外,如果客户端脚本发出虚拟请求,则服务器可以向房间添加请求套接字或从房间移除请求套接字。

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

    此示例是一个 View ,该 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),它是SailsSocket的实例。它允许您发出HTTP式的“虚拟请求”。更多信息here(尽管您似乎已经阅读了有关SailsS​​ocket的所有内容:)。您可以使用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");
    

    希望这可以帮助!

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

    10-16 19:39