我在这里看到了许多类似的问题,例如关于将服务器连接到套接字的问题,但是,这似乎不起作用。
我的目标是让我的一个服务器页面偶尔向所有连接的客户端发出“提前”事件。我的套接字服务器监听器(sockets.js)看起来像这样
io.on('connection', function (socket) {
socket.on('advance', function () {
console.log('advancing clients');
io.emit('advance');
});
});
我的其他服务器页面(queue.js)有这个代码
var socket = require('socket.io-client');
socket.connect('localhost:5000');
socket.on('connect', function () {
socket.emit('advance');
});
我也试过
var socket = require('socket.io-client');
socket.connect('localhost:5000');
socket.emit('advance');
这两个都在我链接的另一个问题中,但是这两个都失败了。在第一个示例的情况下,我收到了错误
socket.on is not a function
第二个
socket.emit is not a function
看起来 socket.connect 工作,但是 socket.on 和 socket.emit 都失败了。这个想法是 queue.js 将向所有客户端发出一个事件,因此他们知道从服务器请求下一首歌曲。
作为奖励,我碰巧正在使用passport.socketio来验证我的用户(尽管我似乎没有收到通常在用户尝试连接但未通过身份验证时出现的“ioAuthFail”消息)。
对于它的价值,我的套接字身份验证代码看起来像
io.use(passportSocketIo.authorize({
//cookieParser:
key:'user',
secret:'secret',
store:new MongoStore({mongooseConnection:mongoose.connection}),
success:onAuthorizeSuccess,
fail:function(){console.log('ioAuthFail')}
}));
如果有比使用 socket.io 更好的方式来推进客户,我也会接受,但现在看来这对我来说是最好的方式,假设我可以让它工作。
如通过评论所述进行编辑 ,将我的代码更改为
var io = require('socket.io-client');
socket = io.connect('localhost:5000');
socket.on('connect', function () {
socket.emit('advance');
});
socket.emit('advance');
不会破坏它,但它也不起作用。