我构建了一个非常简单的socket.io示例(在node.js客户机和服务器之间),因为我的整个socket.io连接一直在重新连接,这是为了调试出错的地方:
socket-server.js
const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server);
server.listen(8080);
console.log("listening...")
let counter = 0;
setInterval(() => {
let data = { beat: counter };
console.log("sending ping", data);
io.sockets.emit('ping', data);
counter++;
}, 1000);
io.on("connection", (socket) => {
console.log("connected to client");
socket.on("pong", (data) => {
console.log("pong", data.beat);
});
});socket-client.js
var io = require('socket.io-client')
var socket = io.connect('http://127.0.0.1:8080/', {
reconnect: true
});
socket.on('connect', function(socket) {
console.log('connected to server');
});
socket.on('ping', function(data) {
socket.emit('pong', data);
console.log('ping', data.beat );
});我启动了服务器,然后过了一会儿,用两个单独的命令提示(Windows)启动了客户机。
socket-server.js输出
listening...
sending ping { beat: 0 }
sending ping { beat: 1 }
sending ping { beat: 2 }
connected to client
sending ping { beat: 3 }
sending ping { beat: 4 }
sending ping { beat: 5 }
sending ping { beat: 6 }
sending ping { beat: 7 }
sending ping { beat: 8 }
sending ping { beat: 9 }
sending ping { beat: 10 }
sending ping { beat: 11 }
sending ping { beat: 12 }
sending ping { beat: 13 }
sending ping { beat: 14 }
sending ping { beat: 15 }
sending ping { beat: 16 }
sending ping { beat: 17 }
sending ping { beat: 18 }
sending ping { beat: 19 }
sending ping { beat: 20 }
sending ping { beat: 21 }
sending ping { beat: 22 }
sending ping { beat: 23 }
sending ping { beat: 24 }
sending ping { beat: 25 }
sending ping { beat: 26 }
sending ping { beat: 27 }
sending ping { beat: 28 }
sending ping { beat: 29 }
sending ping { beat: 30 }
sending ping { beat: 31 }
sending ping { beat: 32 }socket-client.js输出
connected to server
ping 3
ping 4
ping 5
ping 6
ping 7
ping 8
ping 9
ping 10
ping 11
ping 12
ping 13
ping 14
ping 15
ping 16
ping 17
ping 18
ping 19
ping 20
ping 21
ping 22
ping 23
ping 24
ping 25
ping 26
ping 27
C:\Users\jonat\..proj-path..\tests\socket-client.js:10
console.log('ping', data.beat );
^
TypeError: Cannot read property 'beat' of undefined
at Socket.<anonymous> (C:\Users\jonat\..proj-path..\tests\socket-client.js:10:28)由于本地主机上的连接,我的网络质量不会导致连接崩溃,那么是什么原因呢?我如何调试/修复这个问题?
我试过:
将socket.io
发布于 2020-04-29 18:32:55
您的代码无法工作,因为ping和pong是套接字库的保留事件:https://socket.io/docs/emit-cheatsheet/ (最后)。
在输出中,您显示服务器端"pong“也不工作。我试着把“乒乓”改为“乒乓”,把“乒乓”改成“彭”,一切都很好。
最有趣的部分是pong没有工作,但是ping是工作的,并且每25点接收一个未定义的有效载荷,所以数据是未定义的,data.beat是一个错误。我认为这是因为socket IO正在执行他们自己的ping操作,每25秒就不包含任何有效负载。但那只是猜测。
无论如何,您的代码很好,请更改事件名称。
https://stackoverflow.com/questions/61506288
复制相似问题