Socket.IO双火

问题描述 投票:0回答:1

我正在使用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

我仍然没有解决问题,虽然我注意到当我在快速路由代码之外使用套接字代码时,只有一个日志

javascript node.js socket.io
1个回答
1
投票

你不应该把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 () {

  });

});
© www.soinside.com 2019 - 2024. All rights reserved.