Socket io 仅在页面重新加载时发出数据
Socket io only emits data upon page reload
在一个 express.js 项目中,我试图将数据从 nodeJS 服务器发送到客户端。
到达页面后,终端(我从中启动服务器)表明用户已通过套接字连接。但是在 运行 包含套接字发出函数的函数上,什么也没有发生。
只有在重新加载网页时,发出的数据才会出现在 html 和终端控制台日志中。
下面是在 app.js
中的回调函数中触发套接字的代码
foo(function(fooCallback) {
console.log('Callback triggered');
io.on('connection', function(socket) {
console.log('about to send data via socket');
io.sockets.emit('person', { 'name': 'Jack Smith' });
});
});
global.js - (在 jquery 和套接字脚本之后加载客户端 js)
var socket = io.connect();
socket.on('person', function(socket){
console.log('client recieved something from socket');
var personName = socket.name;
$('#person').html(personName);
});
为什么数据只在网页重新加载时发出,而不是自动发出?
在这段代码中:
io.on('connection', function(socket) {
console.log('about to send data via socket');
io.sockets.emit('person', { 'name': 'Jack Smith' });
});
你说你只想在 io
变量第一次连接时 运行 io.sockets.emit('person', { 'name': 'Jack Smith' });
。尝试将其更改为:
io.on('connection', function(socket) {
console.log('about to send data via socket');
});
io.sockets.emit('person', { 'name': 'Jack Smith' });
您的问题是服务器传播连接消息的时间太晚,您的应用无法在第一次加载时检测到它。我不确定你为什么要使用这样的 foo 回调函数。您的 io.on 连接逻辑应该直接放在您的主 js 文件中。但是,一种可能的解决方法是初始化您的 var io = io();在那个 foo 函数里面
在一个 express.js 项目中,我试图将数据从 nodeJS 服务器发送到客户端。
到达页面后,终端(我从中启动服务器)表明用户已通过套接字连接。但是在 运行 包含套接字发出函数的函数上,什么也没有发生。
只有在重新加载网页时,发出的数据才会出现在 html 和终端控制台日志中。
下面是在 app.js
中的回调函数中触发套接字的代码foo(function(fooCallback) {
console.log('Callback triggered');
io.on('connection', function(socket) {
console.log('about to send data via socket');
io.sockets.emit('person', { 'name': 'Jack Smith' });
});
});
global.js - (在 jquery 和套接字脚本之后加载客户端 js)
var socket = io.connect();
socket.on('person', function(socket){
console.log('client recieved something from socket');
var personName = socket.name;
$('#person').html(personName);
});
为什么数据只在网页重新加载时发出,而不是自动发出?
在这段代码中:
io.on('connection', function(socket) {
console.log('about to send data via socket');
io.sockets.emit('person', { 'name': 'Jack Smith' });
});
你说你只想在 io
变量第一次连接时 运行 io.sockets.emit('person', { 'name': 'Jack Smith' });
。尝试将其更改为:
io.on('connection', function(socket) {
console.log('about to send data via socket');
});
io.sockets.emit('person', { 'name': 'Jack Smith' });
您的问题是服务器传播连接消息的时间太晚,您的应用无法在第一次加载时检测到它。我不确定你为什么要使用这样的 foo 回调函数。您的 io.on 连接逻辑应该直接放在您的主 js 文件中。但是,一种可能的解决方法是初始化您的 var io = io();在那个 foo 函数里面