Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 服务器未接收到从客户端发出的Socket.io_Node.js_Websocket_Socket.io - Fatal编程技术网

Node.js 服务器未接收到从客户端发出的Socket.io

Node.js 服务器未接收到从客户端发出的Socket.io,node.js,websocket,socket.io,Node.js,Websocket,Socket.io,我在这一点上疯了,因为我以前使用过Socket.io,它工作得很好,我把事情归结为一个简单的测试,但它仍然不工作,所以我真的在这里找人来拯救我的理智 我在服务器端有以下代码: const io = require("socket.io"); const server = io.listen(80); server.on("connection", function(socket) { socket.on("ping", function(inData) { console.log(

我在这一点上疯了,因为我以前使用过Socket.io,它工作得很好,我把事情归结为一个简单的测试,但它仍然不工作,所以我真的在这里找人来拯救我的理智

我在服务器端有以下代码:

const io = require("socket.io");
const server = io.listen(80);

server.on("connection", function(socket) {
  socket.on("ping", function(inData) {
    console.log("ping received");
    socket.emit("pong", { });
  });
  console.log("connected");
  socket.emit("connected");
});
然后,在客户机上:

<html lang=""><head><title></title>
<script src="http://localhost/socket.io/socket.io.js"></script>
<script>
  const socket = io.connect("http://localhost");
  socket.on("connected", () => {
    console.log("connected");
  });
  socket.on("pong", () => {
    console.log("pong received");
  });

  function testMe() {
    console.log("Emitting ping...");
    socket.emit("ping", {});
  }

</script>
</head><body>
  <input type="button" value="test" onClick="testMe();">
</body></html>
使用以下命令启动服务器:

npx nodemon server.js
在浏览器中加载index.html,我会在浏览器开发工具和服务器控制台中看到“connected”消息。到目前为止还不错。我点击按钮,在控制台中看到“发出ping…”,但仅此而已。服务器上没有消息,正如预期的那样,客户端上也没有消息。好吧,至少在几秒钟内。。。最后我在浏览器上看到一条“收到乒乓球”的消息,这很奇怪,但我认为它与超时有关,因为我从来没有在服务器控制台中看到“收到乒乓球”的消息,所以我不确定是什么触发了它,但考虑到大约30秒后,我认为是超时(请注意,这种情况还会继续发生,大约每30秒我就会看到一次这条消息,而且在第一次之后根本就没有点击按钮——我想这与Socket.io轮询有关?)

我禁用了我的防火墙,以为它可能被阻止了,但仍然无法工作

我在Chrome、Firefox、Edge和Opera中试过,这是四款浏览器的最新版本,没有爱情,所以它不是特定于浏览器的

我想这可能是因为我直接从文件系统加载index.html,可能是同一个域问题,或者可能是CORS(虽然我真的不知道如何处理,控制台中也没有像您通常看到的那样的消息),所以我将其包装在Express中(当然是在使用NPM添加Express之后),如下所示:

这没什么区别,是同一个问题

我尝试使用IP地址而不是localhost,但也没有解决这个问题

我最初在index.html旁边有一个socket.io.js的副本,但后来改为从服务器上加载,因为这似乎更可行,但我只是提到了这一点,让你知道我所做的一切

我还尝试在连接的回调内的客户机上执行socket.on(“pong”)行,我认为这是不必要的,但认为值得一试,同样没有帮助


现在我几乎没有想法了,这让我疯狂了好几个小时。如果有任何想法,我将不胜感激!

这一次我花了一点时间才领会!Ping和Pong在socket.io中似乎是“保留”字。我使用了与您完全相同的代码(使用express作为服务器),但将事件名称更改为“testPing”和“testPong”,并且它按预期工作
关于socket.io中的“pong”和“ping”事件

哦,哇,我一点也没有想到!回想起来,也许应该想到,但非常感谢,那是一个疯狂的事件!
npx nodemon server.js
const app = require("express")();
const server = require("http").Server(app);
const io = require("socket.io")(server);

server.listen(80);

app.get("/", function (inRequest, inResponse) {
  inResponse.sendFile(__dirname + "/index.html");
});

io.on("connection", function (socket) {
  console.log("connected");
  socket.on("ping", function (inData) {
    console.log("ping received");
    socket.emit("pong", { });
  });
  socket.emit("connected",);
});