我正在尝试使用socket.io-client
将我的Node.JS(使用Sails.JS编写)应用程序连接到另一个Node.JS服务器(Express4 / Socket.io)。
我的帆船服务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应用程序的连接?
答案 0 :(得分:1)
这里的问题可能是你试图重复使用
来自Sails内部的socket.io-client
。通常,如果您在项目中直接require()
- Sails的依赖关系,那么您将走向错误的方向。在这种情况下,socket.io-client
会缓存配置和连接,因此您的require
无法获得新的副本。
相反,做
npm install socket.io-client@~0.9.16 --save
在您的项目中并要求
var client = require('socket.io-client');
这将为您提供一个可以使用的套接字客户端的新副本,并避免与Sails核心版本的任何冲突。