Node.js 服务器未接收到从客户端发出的Socket.io
我在这一点上疯了,因为我以前使用过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(
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",);
});