Socket.io funktioniert nicht auf Firefox & Chrome
Ich versuche zu entwickeln, ist eine einfache chat-Anwendung.
Hier ist mein chat.js Datei.
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs');
app.listen(8124);
function handler (req, res) {
fs.readFile(__dirname + '/chat.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading chat.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
socket.on('addme',function(username) {
socket.username = username;
socket.emit('chat', 'SERVER', 'You have connected');
socket.broadcast.emit('chat', 'SERVER', username + ' is on deck');
});
socket.on('sendchat', function(data) {
io.sockets.emit('chat', socket.username, data);
});
socket.on('disconnect', function() {
io.sockets.emit('chat', 'SERVER', socket.username + ' has left the building');
});
});
Und meine chat.html Datei.
<head>
<meta charset="utf-8">
<title>bi-directional communication</title>
<script src="/socket.io/socket.io.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
$(document).ready(function(e) {
var socket = io.connect('http://localhost:8124/');
$('#submit').click(function(e) {
e.preventDefault();
v = $('#uname').val();
$('#username').html('');
socket.emit('addme', v);
});
socket.on('chat',function(username, data) {
var p = document.createElement('p');
p.innerHTML = username + ': ' + data;
document.getElementById('output').appendChild(p);
});
window.addEventListener('load',function() {
document.getElementById('sendtext').addEventListener('click',
function() {
var text = document.getElementById('data').value;
socket.emit('sendchat', text);
}, false);
}, false);
});
</script>
</head>
<body>
<div id="output"></div>
<div id="username">
<input type="text" name="uname" id="uname">
<input type="submit" name="submit" id="submit" value="Submit">
</div>
<div id="send">
<input type="text" id="data" size="100" /><br />
<input type="button" id="sendtext" value="Send Text" />
</div>
</body>
</html>
Ich testen Sie den code durch Eingabe Knoten chat.js in node.js Eingabeaufforderung & dann die Eingabe http://localhost:8124/
in meiner browser-Adressleiste. Das problem ist, dass das funktioniert zwar perfekt auf IE9, nichts passiert auf Firefox und Chrome.
Ich erhalte folgende auf Node.js Eingabeaufforderung, wenn ich diese in chrome oder firefox.
info - socket.io started
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 0yJjYvt7o36BTX6T_hXA
debug - setting request GET /socket.io/1/websocket/0yJjYvt7o36BTX6T_hXA
debug - set heartbeat interval for client 0yJjYvt7o36BTX6T_hXA
debug - client authorized for
debug - websocket writing 1::
debug - setting request GET /socket.io/1/xhr-polling/0yJjYvt7o36BTX6T_hXA?t=1
341573194770
debug - setting poll timeout
debug - discarding transport
debug - cleared heartbeat interval for client 0yJjYvt7o36BTX6T_hXA
debug - setting request GET /socket.io/1/jsonp-polling/0yJjYvt7o36BTX6T_hXA?t
=1341573204771&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 0yJjYvt7o36BTX6T_hXA
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/0yJjYvt7o36BTX6T_hXA?t
=1341573224817&i=0
debug - setting poll timeout
debug - discarding transport
debug - cleared close timeout for client 0yJjYvt7o36BTX6T_hXA
debug - clearing poll timeout
debug - jsonppolling writing io.j[0]("8::");
debug - set close timeout for client 0yJjYvt7o36BTX6T_hXA
debug - jsonppolling closed due to exceeded duration
debug - setting request GET /socket.io/1/jsonp-polling/0yJjYvt7o36BTX6T_hXA?t
=1341573244856&i=0
und diese geht auf. Bitte helfen Sie.
- Scheint zu funktionieren für mich einwandfrei (Knoten 0.8.0, Buchse.io 0.9.6, Windows XP). Eine Möglichkeit: wickeln Sie das client-Sachen in der "load" - Ereignis-listener; je nach timing, dass der Termin möglicherweise bereits ausgelöst, bevor die jQuery-ready-handler und verpasst werden.
- Aber warum sollte es einen Unterschied machen, wenn es perfekt funktioniert, auf IE?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Danke ebohlman für Ihre Zeit, aber ich das problem gelöst. In meinem chat.js habe ich noch die folgende Zeile.
Nun meine chat.js sieht aus wie.
Aber ich weiß noch nicht, was möglicherweise den Fehler verursacht hat. Wenn man weiß, bitte erklären!
Traf ich die gleichen Probleme, wenn Sie versuchen, zu veröffentlichen, zu AppFog. Sie wird verursacht durch websockets nicht unterstützt wird von AppFog noch, so dass Ihr fix funktioniert, indem zwingt Buchse.io zu verwenden long-polling/AJAX. AppFog ist die Arbeit auf der Unterstützung von websockets laut Ihrer website, aber kein Datum gegeben worden ist.
Meisten cloud-PaaS-Anbietern, die ich gefunden habe unterstützen KEINE websockets leider noch. Eine Bemerkenswerte Ausnahme, dass ich die Prüfung jetzt ist Nodejitsu: http://nodejitsu.com/
Ich denke, das wird helfen, zu wissen, über das Problem, und wie man es behebt
Ich suchte viel für es und endlich habe ich es geschafft
Was bedeutet "xhr-polling" config-do-in-Buchse.io?
danke