Javascript Socket.io无法发出函数

Javascript Socket.io无法发出函数,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我一直在使用socket.io开发一个游戏,发现当第二个参数是函数时,socket.emit函数似乎不能正常工作。当我使用socket.on并尝试调用(甚至是console.log)该函数时,它会说data.testFunction不是一个函数。我也尝试过使用对象,但收到后,所有对象方法都丢失了。 node.js代码: const http = require("http"), fs = require("fs"), port = 9009;

我一直在使用socket.io开发一个游戏,发现当第二个参数是函数时,socket.emit函数似乎不能正常工作。当我使用socket.on并尝试调用(甚至是console.log)该函数时,它会说data.testFunction不是一个函数。我也尝试过使用对象,但收到后,所有对象方法都丢失了。
node.js代码:

const
  http = require("http"),
  fs = require("fs"),
  port = 9009;

const server = http.createServer((req, res) => {
  res.writeHeader(200, {"Content-Type": "text/html"});
  res.write(fs.readFileSync("client/index.html", "utf8"));
  res.end();
}

server.listen(port);

const io = require("socket.io")(server, {});

io.sockets.on("connection", (socket) => {
  
  console.log("socket connection");
  
  socket.emit("test", () => {return 2+2;});
  
}
和index.html:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Game</title>
  <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap" rel="stylesheet">
  <style>
    *{
      margin: 0;
      overflow: hidden;
      background: #333;
      font-family: "Poppins", sans-serif;
    }
    canvas{
      background: #777;
    }
  </style>
</head>
<body>
  <script src="https://cdn.socket.io/socket.io-3.0.0.js"></script>
  <script>

const socket = io();

socket.on("test", (func) => {
  func();
  console.log(func);
});

  </script>
</body>
</html>

将函数作为字符串传递

socket.emit(“test”,(()=>{return 2+2;}).toString());
调用存储为字符串的函数

socket.on(“测试”(func)=>{
评估(职能)();
控制台日志(func);
});
试验

constfun=(()=>{return 2+2;}).toString()
console.log(乐趣类型)

log(eval(fun)()
我认为您需要为io()指定特定的URL

您不能直接传递函数。状态
可以发出任何可序列化的数据结构
,函数不是数据结构。欢迎使用SO!为什么要通过套接字传递函数?你到底想在这里完成什么?对我来说似乎是个问题。
Uncaught ReferenceError: func is not defined
undefined