Socket.io 不适用于 Firefox &铬合金 [英] Socket.io does not work on Firefox & Chrome

查看:19
本文介绍了Socket.io 不适用于 Firefox &铬合金的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试开发一个简单的聊天应用程序.这是我的 chat.js 文件.

var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs');应用程序听(8124);函数处理程序 (req, res) {fs.readFile(__dirname + '/chat.html',功能(错误,数据){如果(错误){res.writeHead(500);return res.end('加载 chat.html 时出错');}res.writeHead(200);res.end(数据);});}io.sockets.on('connection', function (socket) {socket.on('addme',function(username) {socket.username = 用户名;socket.emit('chat', 'SERVER', '你已经连接');socket.broadcast.emit('chat', 'SERVER', 用户名 + ' 在甲板上');});socket.on('sendchat', function(data) {io.sockets.emit('chat', socket.username, data);});socket.on('断开', 函数() {io.sockets.emit('chat', 'SERVER', socket.username + '已经离开大楼');});});

还有我的 chat.html 文件.

<meta charset="utf-8"><title>双向通信</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><脚本>$(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 = 用户名 + ':' + 数据;document.getElementById('output').appendChild(p);});window.addEventListener('load',function() {document.getElementById('sendtext').addEventListener('click',功能() {var text = document.getElementById('data').value;socket.emit('sendchat', text);}, 错误的);}, 错误的);});<身体><div id="输出"></div><div id="用户名"><input type="text" name="uname" id="uname"><input type="submit" name="submit" id="submit" value="Submit">

<div id="发送"><input type="text" id="data" size="100"/><br/><input type="button" id="sendtext" value="发送文本"/>

我通过在 node.js 命令提示符中键入 node chat.js 来测试代码 &然后在我的浏览器地址栏中输入 http://localhost:8124/.问题是,虽然这在 IE9 上运行良好,但在 Firefox 和 Chrome 上没有任何反应.

当我在 chrome 或 firefox 上运行时,我在 Node.js 命令提示符下收到以下内容.

info - socket.io 已启动调试 - 提供静态内容/socket.io.js调试 - 客户端授权信息 - 握手授权 0yJjYvt7o36BTX6T_hXA调试 - 设置请求 GET/socket.io/1/websocket/0yJjYvt7o36BTX6T_hXA调试 - 为客户端 0yJjYvt7o36BTX6T_hXA 设置心跳间隔调试 - 客户端授权调试 - websocket 编写 1::调试 - 设置请求 GET/socket.io/1/xhr-polling/0yJjYvt7o36BTX6T_hXA?t=1341573194770调试 - 设置轮询超时调试 - 丢弃传输调试 - 清除客户端 0yJjYvt7o36BTX6T_hXA 的心跳间隔调试 - 设置请求 GET/socket.io/1/jsonp-polling/0yJjYvt7o36BTX6T_hXA?t=1341573204771&i=0调试 - 设置轮询超时调试 - 丢弃传输调试 - 清除轮询超时调试 - 清除轮询超时调试 - jsonppolling 写入 io.j[0]("8::");调试 - 为客户端 0yJjYvt7o36BTX6T_hXA 设置关闭超时调试 - jsonppolling 由于超过持续时间而关闭调试 - 设置请求 GET/socket.io/1/jsonp-polling/0yJjYvt7o36BTX6T_hXA?t=1341573224817&i=0调试 - 设置轮询超时调试 - 丢弃传输调试 - 清除客户端 0yJjYvt7o36BTX6T_hXA 的关闭超时调试 - 清除轮询超时调试 - jsonppolling 写入 io.j[0]("8::");调试 - 为客户端 0yJjYvt7o36BTX6T_hXA 设置关闭超时调试 - jsonppolling 由于超过持续时间而关闭调试 - 设置请求 GET/socket.io/1/jsonp-polling/0yJjYvt7o36BTX6T_hXA?t=1341573244856&i=0

然后继续.请帮忙.

解决方案

感谢 ebohlman 抽出宝贵时间,但我解决了问题.在我的 chat.js 中,我添加了以下行.

io.configure('development', function(){io.set('transsports', ['xhr-polling']);});

现在我的 chat.js 看起来像.

var app = require('http').createServer(handler), io = require('socket.io').listen(app), fs = require('fs');应用程序听(8124);io.configure('开发', 函数(){io.set('transsports', ['xhr-polling']);});函数处理程序 (req, res) {fs.readFile(__dirname + '/chat.html',功能(错误,数据){如果(错误){res.writeHead(500);return res.end('加载 chat.html 时出错');}res.writeHead(200);res.end(数据);});}io.sockets.on('connection', function (socket) {socket.on('addme',function(username) {socket.username = 用户名;socket.emit('chat', 'SERVER', '你已经连接');socket.broadcast.emit('chat', 'SERVER', 用户名 + ' 在甲板上');});socket.on('sendchat', function(data) {io.sockets.emit('chat', socket.username, data);});socket.on('断开', 函数() {io.sockets.emit('chat', 'SERVER', socket.username + '已经离开大楼');});});

但我仍然不知道是什么导致了错误.知道的请解释一下!

I'm trying to develop a simple chat application. Here is my chat.js file.

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');
    });
});

And my chat.html file.

<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>

I test the code by typing node chat.js in node.js command prompt & then typing http://localhost:8124/ in my browser address bar. The problem is that while this works perfectly on IE9, nothing happens on Firefox and Chrome.

I'm receiving the following on Node.js command prompt when I run this on chrome or 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

and this goes on. Please help.

解决方案

Thankyou ebohlman for your time but I solved the problem. In my chat.js I added the following line.

io.configure('development', function(){
  io.set('transports', ['xhr-polling']);
});

Now my chat.js looks like.

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');
    });
});

But I still don't know what might have caused the error. If you know please explain!

这篇关于Socket.io 不适用于 Firefox &amp;铬合金的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆