我正在开发一个简单的聊天应用程序。
这是我的chat.js文件。
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');
});
});
以及我的chat.html文件。
<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>
我通过在node.js命令提示符中键入node chat.js来测试代码,然后在浏览器地址栏中键入
http://localhost:8124/
。问题是,虽然这在ie9上运行得很好,但在firefox和chrome上什么也没有发生。在chrome或firefox上运行时,node.js命令提示如下。
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
这一切还在继续。请帮忙。
最佳答案
感谢埃博尔曼给你时间,但我解决了问题。在chat.js中,我添加了以下行。
io.configure('development', function(){
io.set('transports', ['xhr-polling']);
});
现在我的chat.js看起来像。
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs');
app.listen(8124);
io.configure('development', function(){
io.set('transports', ['xhr-polling']);
});
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');
});
});
但我还是不知道是什么导致了这个错误。如果你知道请解释!