javascript socket.io 中从客户端到服务器的连接失败
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17730369/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Connection Failed from Client to Server in socket.io
提问by Hackableweb
I am new to node js and socket.io, i am trying basic example of socket.io in my windows machine.
我是 node js 和 socket.io 的新手,我正在我的 Windows 机器上尝试 socket.io 的基本示例。
Server Code
服务器代码
var io = require('socket.io').listen(8080);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
Client Code
客户代码
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:8080/');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
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>
In the above script client can not connect to the server (in console connect_failed was logged), but in the same time server side following was shown,
在上面的脚本中客户端无法连接到服务器(在控制台 connect_failed 被记录),但同时服务器端显示如下,
info - socket.io started
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized ALB0omsm3E2ZvPMn02x7
debug - setting request GET /socket.io/1/websocket/ALB0omsm3E2ZvPMn02x7
debug - set heartbeat interval for client ALB0omsm3E2ZvPMn02x7
debug - client authorized for
debug - websocket writing 1::
debug - websocket writing 5:::{"name":"news","args":[{"hello":"world"}]}
debug - setting request GET /socket.io/1/xhr-polling/ALB0omsm3E2ZvPMn02x7?t=1
374168523063
debug - setting poll timeout
debug - discarding transport
debug - cleared heartbeat interval for client ALB0omsm3E2ZvPMn02x7
debug - setting request GET /socket.io/1/jsonp-polling/ALB0omsm3E2ZvPMn02x7?t
=1374168533064&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 ALB0omsm3E2ZvPMn02x7
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/ALB0omsm3E2ZvPMn02x7?t
=1374168556555&i=0
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client ALB0omsm3E2ZvPMn02x7
debug - clearing poll timeout
debug - jsonppolling writing io.j[0]("8::");
debug - set close timeout for client ALB0omsm3E2ZvPMn02x7
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/ALB0omsm3E2ZvPMn02x7?t
=1374168576586&i=0
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client ALB0omsm3E2ZvPMn02x7
debug - clearing poll timeout
debug - jsonppolling writing io.j[0]("8::");
debug - set close timeout for client ALB0omsm3E2ZvPMn02x7
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/ALB0omsm3E2ZvPMn02x7?t
=1374168596600&i=0
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client ALB0omsm3E2ZvPMn02x7
debug - clearing poll timeout
debug - jsonppolling writing io.j[0]("8::");
debug - set close timeout for client ALB0omsm3E2ZvPMn02x7
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/ALB0omsm3E2ZvPMn02x7?t
=1374168616640&i=0
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client ALB0omsm3E2ZvPMn02x7
debug - clearing poll timeout
debug - jsonppolling writing io.j[0]("8::");
debug - set close timeout for client ALB0omsm3E2ZvPMn02x7
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/ALB0omsm3E2ZvPMn02x7?t
=1374168636656&i=0
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client ALB0omsm3E2ZvPMn02x7
debug - setting request GET /socket.io/1/xhr-polling/ALB0omsm3E2ZvPMn02x7?t=1
374168523063
debug - setting poll timeout
debug - discarding transport
debug - clearing poll timeout
debug - clearing poll timeout
debug - xhr-polling writing 8::
debug - set close timeout for client ALB0omsm3E2ZvPMn02x7
debug - xhr-polling closed due to exceeded duration
debug - setting request GET /socket.io/1/xhr-polling/ALB0omsm3E2ZvPMn02x7?t=1
374168663072
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client ALB0omsm3E2ZvPMn02x7
debug - clearing poll timeout
debug - xhr-polling writing 8::
debug - set close timeout for client ALB0omsm3E2ZvPMn02x7
debug - xhr-polling closed due to exceeded duration
debug - setting request GET /socket.io/1/xhr-polling/ALB0omsm3E2ZvPMn02x7?t=1
374168690890
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client ALB0omsm3E2ZvPMn02x7
debug - clearing poll timeout
debug - xhr-polling writing 8::
debug - set close timeout for client ALB0omsm3E2ZvPMn02x7
debug - xhr-polling closed due to exceeded duration
debug - setting request GET /socket.io/1/xhr-polling/ALB0omsm3E2ZvPMn02x7?t=1
374168710895
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client ALB0omsm3E2ZvPMn02x7
How can i fix the error in the above scripts to successfully run the basic example of socket.io?
如何修复上述脚本中的错误以成功运行 socket.io 的基本示例?
回答by softvar
You can configure the socket.io settings as per your requirements. https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO
您可以根据您的要求配置 socket.io 设置。 https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO
I also encountered the same problem and found that adding the below line solves the problem
我也遇到了同样的问题,发现添加下面这行解决了问题
io.set('transports',['xhr-polling']);
回答by rafaelcastrocouto
Make a localhost.js file with this data:
使用此数据创建一个 localhost.js 文件:
var port = 80,
http = require('http'),
fs = require('fs'),
socket = require('socket.io'),
app = function (req, res) {
var url = req.url == '/' ? '/index.html' : req.url;
fs.readFile(__dirname + url, 'utf8', function (err, data) {
if (err) return console.log(err);
res.end(data);
});
},
httpServer = http.createServer(app).listen(port),
io = socket.listen(httpServer);
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
And a index.html file with this:
还有一个 index.html 文件:
<html>
<head>
<script src="socket.min.js"></script>
</head>
<body>
<script>
var socket = io.connect('ws://localhost:80/');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
socket.on('connect', function () {
console.log('connect');
});
socket.on('error', function (data) {
console.log(data || 'error');
});
</script>
</body>
</html>
put socket.min.js in the same folder then run in cmd:
将 socket.min.js 放在同一个文件夹中,然后在 cmd 中运行:
node localhost.js