我正在使用Socket.IO将数据从我的客户端发送到我的node.js服务器。当我从客户端收到数据时,我只是记录它。但是数据记录两次我只希望它记录一次?
这是客户端代码
btn.addEventListener("click", (e) => {
socket.emit("comparison", "hello");
});
这是服务器端代码
app.get("/", (req, res) => {
io.on("connection", (socket) => {
socket.on("comparison", (data) => {
console.log(data);
})
})
它记录'你好你好'
知道这是什么意思吗?
UPDATE
我仍然没有解决问题,虽然我注意到当我在快速路由代码之外使用套接字代码时,只有一个日志
你不应该把io.on('connection')放在app.get('/')里面。你在这里做的是在每个get请求上注册一个事件监听器。您看到两个语句的原因与app.get()中处理的请求数量直接相关。
看一下socket.io站点https://socket.io/docs/#Using-with-Express中提供的示例
我在这里添加了类似的代码样板,
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 8000;
var server = require('http').createServer(app);
var io = require('socket.io')(server);
app.use(express.static(__dirname + '/app'));
app.use(bodyParser.urlencoded({ extended: true }));
server.listen(port,() => {
console.log("server listening on"+port);
});
app.get('/', function(req, res){
//do something
});
io.on('connection',function(socket){
socket.on('comparison', function () {
});
});