1

我正在尝试使用socket.io-client.

我的航行服务app/services/Watcher.js看起来像

var client = require('../../node_modules/sails/node_modules/socket.io/node_modules/socket.io-client');

// callback of the form function(socket)
exports.connect = function(callback) {
  sails.log.debug("will connect socket to", sails.config.watcher.uri, "with Socket.io-client version", client.version);
  var socket = client.connect(sails.config.watcher.uri);
  socket.on('connect', function(){
    sails.log.debug("connected");
    socket.on('disconnect', function(){
      sails.log.debug("Disconnected");
    });
    socket.on('error', function(err){
      sails.log.debug("Could not connect", err);
    });
    callback(socket);
  });
};

调用config/bootstrap.js方式如下:

Watcher.connect(function(socket){
  sails.log.debug("Connected watcher to relay with socket", socket);
});

在 Express 方面,我的服务器relay.js很简单:

var app = require('express')(),
    http = require('http').Server(app),
    io = require('socket.io').listen(http),
    port = process.env.RELAY_PORT || 8000;

app.get('/', function(req, res) {
  var response = {message: "some response"}; // to be implemented.
  res.json(response);
});

http.listen(port, function () {
  console.log("Relay listening on port " + port);
});

io.sockets.on('connection', function (socket) {
  console.log("Connection opened", socket);
  socket.on('disconnect', function () {
    console.log("Socket disconnected");
  });
});

当我node relay尽职尽责地运行它时

Relay listening on port 8000

当我sails lift我的另一台服务器时,它尽职尽责地报告

will connect socket to http://localhost:8000 with Socket.io-client version 0.9.16

但我从来没有看到真正的联系。

如果我将浏览器指向localhost:8000我会得到{"message":"some response"} JSON我期望的响应。

为什么我的中继服务器不接受来自我的 socker.io-client 应用程序的连接?

4

1 回答 1

1

这里的问题可能是您试图 socket.io-client从 Sails 内部重新使用。一般来说,如果您require()直接在项目中使用 Sails 的依赖项,那么您将走错方向。在这种情况下,socket.io-client缓存配置和连接,因此您require不会获得新副本。

相反,做

npm install socket.io-client@~0.9.16 --save

在您的项目中并要求

var client = require('socket.io-client');

这将为您提供一个新的套接字客户端副本以供使用,并避免与 Sails 核心版本的任何冲突。

于 2014-09-09T17:59:46.537 回答