Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sails.js websockets在localhost中工作,但在部署到Openshift后就不工作了_Javascript_Node.js_Websocket_Sails.js_Openshift - Fatal编程技术网

Javascript Sails.js websockets在localhost中工作,但在部署到Openshift后就不工作了

Javascript Sails.js websockets在localhost中工作,但在部署到Openshift后就不工作了,javascript,node.js,websocket,sails.js,openshift,Javascript,Node.js,Websocket,Sails.js,Openshift,摘要: 我正在为一个基于sails.js的网站设计一个管理面板。我已将WebSocket配置为在本地主机中工作。但是当我部署到openshift时,只有io.socket.on('connect',…);正在开火。但是,当我发布添加记录时,客户机中没有收到任何内容 详细信息: 首先,关于我的配置的一些细节: Sails.js版本:0.12.3 Node.js版本:v0.10.36(将其更改为该版本以匹配openshift的版本v0.10.35) 套接字客户端:sails.io.js 尝试内存

摘要:

我正在为一个基于sails.js的网站设计一个管理面板。我已将WebSocket配置为在本地主机中工作。但是当我部署到openshift时,只有io.socket.on('connect',…);正在开火。但是,当我发布添加记录时,客户机中没有收到任何内容


详细信息:

首先,关于我的配置的一些细节:

  • Sails.js版本:0.12.3
  • Node.js版本:v0.10.36(将其更改为该版本以匹配openshift的版本v0.10.35)
  • 套接字客户端:sails.io.js
  • 尝试内存套接字存储和redis套接字存储,其行为相同

当前行为:

我正在尝试为我的应用程序启用通知系统,因此我在客户端代码中使用默认的sails.io.js连接websocket(使用默认的io.socket对象),现在我使用console.log()记录任何事件。客户端js文件中的代码如下所示:

$(document).ready(function () {
  io.sails.environment = "development";

  if(window.location.hostname === "localhost") {
    io.sails.url = 'http://localhost:1337';
  } else {
    io.sails.url = 'http://myapp-username.rhcloud.com:8000';
  }

  var adminSocket = io.socket;

  // Access socket's connect event to initialize functions
  adminSocket.on('connect', function () {
    console.log("Connected to socket");
    // Subscribe to admin model of current user
    adminSocket.get('/admin/subscribeToModel');
  });

  // Access notification (adminAlerts) model's socket events
  adminSocket.on('admin', function(event) {
    console.log(event);
  });

  // Log Errors
  adminSocket.on('error', function (event) {
    console.log(event);
  });
});
正如您所见,代码在套接字连接后运行io.socket.get(…)这适用于localhost和openshift并记录“连接到套接字”以及sails.io.js的默认连接消息。当服务器关闭时,客户端将尝试重新连接作为默认行为

io.socket.get在管理控制器中运行自定义控制器函数:

subscribeToModel: function(req, res, next) {
    if (!req.isSocket) {
      console.log("Not Socket");
      return res.badRequest();
    }
    console.log("Socket");
    Admin.subscribe(req, [req.session.userid]); //Subscribes to Admin model's entry with the user's id

    return res.json({message: "Subscribed"});
  }
这将在openshift和localhost中记录“Socket”,但返回消息不可用。我不知道订阅在openshift中是否有效,但它在localhost中肯定有效

这是设置。现在我构建了一个函数来测试套接字行为。在我创建的管理控制器中:

createAndBroadcastNotification: function (req, res, next) {
    AdminAlerts.create({
      admin: req.session.admin.id,
      alertHeader: 'Some Header',
      alertBody: 'Some Message',
      alertType: 'label-info',
      url: '/somepage'
    }).exec(function (err, alert) {
      if (err) {
        res.serverError(err);
      }
      Admin.findOne({ where: {id: req.session.admin.id} }).populate('alerts').exec(function (err, admin) {
                if (err) {
            res.serverError(err);
          }
                Admin.publishAdd(req.session.userid, 'alerts', alert.id);
                return res.json({message: "Done"});
        });
    });
  }
此后,openshift和localhost都将在浏览器中显示{message:Done},并在mySQL数据库中创建和关联记录。但是只有Localhost按预期在控制台中发布此消息:

Object {id: 1, verb: "addedTo", attribute: "alerts", addedId: 10}
Openshift没有显示这样的消息。它也没有显示任何错误消息

5天来我一直在想这个问题。我还没有找到一条线索来解释为什么会发生这种情况


目标:


我希望在客户机中获得console.log()消息,以表示添加了警报。

我找到了答案。对于任何面临相同或类似问题的人来说,openshift的文档(在博客中)已经过时。让sails.io.js了解主机和端口“很好”。但它在firefox中返回一个连接错误。以下是变化:

// client-side-code.js
$(document).ready(function () {
  // io.sails.environment = "development";

  // if(window.location.hostname === "localhost") {
  //   io.sails.url = 'http://localhost:1337';
  // } else {
  //   io.sails.url = 'http://myapp-username.rhcloud.com:8000';
  // }

  var adminSocket = io.socket;

  // Access socket's connect event to initialize functions
  adminSocket.on('connect', function () {
    console.log("Connected to socket");
    // Subscribe to admin model of current user
    adminSocket.get('/admin/subscribeToModel');
  });

  // Access notification (adminAlerts) model's socket events
  adminSocket.on('admin', function(event) {
    console.log(event);
  });

  // Log Errors
  adminSocket.on('error', function (event) {
    console.log(event);
  });
});