gpt4 book ai didi

javascript - socket.io - 'connect' 事件不会在客户端触发

转载 作者:IT老高 更新时间:2023-10-28 22:00:36 25 4
gpt4 key购买 nike

我正在尝试开始使用 node.js 和 socket.io。
我有一个非常(非常)简单的客户端-服务器测试应用程序,但我无法让它工作。
系统设置在一台装有apache服务器的windows机器上。
apache 在 port 81 上运行,socket.io 设置为监听 port 8001

服务器 - server.js

var io = require('socket.io').listen(8001);

io.sockets.on('connection', function (socket) {
console.log('\ngot a new connection from: ' + socket.id + '\n');
});

客户端 - index.html

<!DOCTYPE html>
<html>
<head>
<title>node-tests</title>
<script type="text/javascript" src="http://localhost:8001/socket.io/socket.io.js"> </script>
<script type="text/javascript">
var socket = io.connect('http://localhost', { port: 8001 });

socket.on('connect', function () {
alert('connect');
});

socket.on('error', function (data) {
console.log(data || 'error');
});

socket.on('connect_failed', function (data) {
console.log(data || 'connect_failed');
});
</script>
</head>
<body>

</body>
</html>

使用 node server.js 启动我的服务器后,标准(预期)输出将写入服务器控制台:

info: socket.io started

当我在浏览器中打开 index.html 时(在我的情况下为 chrome - 未在其他浏览器上测试),以下日志将写入服务器控制台:

info: socket.io started
debug: served static content /socket.io.js
debug: client authorized
info: handshake authorized 9952353481638352052
debug: setting request GET /socket.io/1/websocket/9952353481638352052
debug: set heartbeat interval for client 9952353481638352052
debug: client authorized for

got a new connection from: 9952353481638352052

debug: setting request GET /socket.io/1/xhr-polling/9952353481638352052?t=1333635235315
debug: setting poll timeout
debug: discarding transport
debug: cleared heartbeat interval for client 9952353481638352052
debug: setting request GET /socket.io/1/jsonp-polling/9952353481638352052?t=1333635238316&i=0
debug: setting poll timeout
debug: discarding transport
debug: clearing poll timeout
debug: clearing poll timeout
debug: jsonppolling writing io.j[0]("8::");
debug: set close timeout for client 9952353481638352052
debug: jsonppolling closed due to exceeded duration
debug: setting request GET /socket.io/1/jsonp-polling/9952353481638352052?t=1333635258339&i=0
...
...
...

在浏览器控制台中我得到:

connect_failed

所以看起来客户端正在到达服务器并尝试连接,并且服务器正在授权握手但 connect 事件从未在客户端中触发,而是连接方法到达它的 connect timeout最大重新连接尝试次数 并放弃返回 connect_failed

对此的任何帮助\见解都会有所帮助。

谢谢

最佳答案

确保客户端和服务器的 socket.io 主版本相同。例如,服务器上的 socket.io@2.3.0 和客户端上的 socket.io-client@3.x.x 组合会导致这种情况和 'connect' 事件未发送。

关于javascript - socket.io - 'connect' 事件不会在客户端触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com