当前位置: 首页 > 知识库问答 >
问题:

在IE中使用XHR-polling的socket.io

谷梁宁
2023-03-14

到目前为止,一切都很好。Chrome、Firefox和Opera都使用原生的websockets,所有消息都能正确接收。

但是,Internet Explorer和IcewaSel正在使用行为有点奇怪的XHR-polling回退...客户机只接收两条消息,在此之后客户机可以向服务器发送消息,但不会向客户机发送消息。从XHR-client发送的消息被正确接收和处理-每个websocket客户机都得到发送的消息。

在socket.io中使用LogLevel3,我得到以下输出:

debug: clearing poll timeout
debug: xhr-polling writing 5:::{"message":"..."}
debug: set close timeout for client VjrHOXHjjg76bD_qx46C
debug: setting request GET /socket.io/1/xhr-polling/VjrHOXHjjg76bD_qx46C?t=1345663246573
debug: setting poll timeout
debug: clearing poll timeout
debug: xhr-polling writing �262�5:::{"message":"another message ..."}�200�5:::{"message":"message #3 ..."}
debug: set close timeout for client VjrHOXHjjg76bD_qx46C
debug: discarding transport
debug: cleared close timeout for client VjrHOXHjjg76bD_qx46C

第一条消息(日志第2行)由XHR-client接收,但是第7行中的那些消息消失了。我还注意到了第7行中的特殊字符,但我不知道它们是否是这个bug的原因。

debug - xhr-polling received data packet 5:::{"message":"input by the client"}

连接到PHP服务器本身的NodeJS客户机非常简单(使用simpletcp库):

// Client is the simpletcp-client
client.on("data", function(data) {

    var msgData;

    try {
        msgData = JSON.parse(data.toString("utf8"));
    } catch(e) {

        console.log("JSON-parse error!");
        return;
    }

    var socket = getsock(msgData.sid); // msgData.sid is the socket.id to identify the socket

    if(socket == null) {
        console.log("Client not found!");
        return;
    }

    socket.emit("message", { "message" : msgData.message });
});

我现在要问的是-这是一个socket.io bug,还是我的脚本中有什么错误?

共有1个答案

楚健
2023-03-14

让事情变得更疯狂的是,如果我打开开发工具(F12),在IE中一切都很好。

一点也不疯狂。在打开开发工具之前,Internet Explorer没有Console对象(Console.log引发阻止代码的异常)。删除所有console.log行,看看它是否有效。如果您想要调试脚本,那么您应该编写自己的自定义调试工具。下面是一个简单的例子:

window.debug = function() {
    if (window.console && window.console.log) {
        window.console.log.apply( window.console, arguments );
    }
}
debug("JSON-parse error!");

如果有用就告诉我们。

 类似资料:
  • 问题内容: 我有一个socket.io节点脚本,其中: 当我连接Chrome / Safari并关闭页面时,看到“断开连接!” 在我的服务器控制台中。 但是,当我连接iPhone并关闭页面时,看不到此消息。我懂了 如何通过iOS接收断开连接事件? 问题答案: 当您在iPhone中查看页面时,Socket.io切换到xhr-polling传输。这可能是由socket.io的配置引起的,或者是由于iP

  • 问题内容: 我有一个使用XMLHttpRequest来下载二进制资源的网页。 在Firefox和Gecko中,即使字节流包含二进制零,我也可以使用responseText来获取字节。我可能需要强迫模仿才能实现。但是,在IE中,responseText不起作用,因为它似乎在第一个零处终止。如果读取100,000个字节,并且字节7为二进制零,则只能访问7个字节。IE的XMLHttpRequest公开了

  • 问题内容: OK,所以我正在尝试使用Selenium导出文件。我的浏览器是IE。当我 单击导出按钮时,将出现一个本机Windows对话框。 弹出的图片 在此处输入图片说明 我必须单击“保存”按钮。为此,我尝试使用AutoIT但 不起作用。 这没有用。因此,我决定使用Robot类并执行键盘单击Atl + S,因为这还将使浏览器能够保存文件。那 也不起作用。 我认为Web驱动程序存在一些问题,因为我尝

  • 我已经使用了下面的代码,将鼠标移到选项卡上,然后选择表中的菜单。鼠标悬停在Firefox上运行良好,但在Chrome和Internet Explorer上不起作用。在选择菜单之前,我们已经选择了iframe。请建议在IE WebDriver中处理鼠标悬停的替代方法我使用了鼠标悬停的操作方法。

  • 长轮询是与服务器保持持久连接的最简单的方式,它不使用任何特定的协议,例如 WebSocket 或者 Server Sent Event。 它很容易实现,在很多场景下也很好用。 常规轮询 从服务器获取新信息的最简单的方式是定期轮询。也就是说,定期向服务器发出请求:“你好,我在这儿,你有关于我的任何信息吗?”例如,每 10 秒一次。 作为响应,服务器首先通知自己,客户端处于在线状态,然后 —— 发送目

  • 问题内容: 我正在尝试使用HTML5 canvas元素绘制一些弧和圆-这在FF中效果很好,但是IE8似乎不支持它。 现在,存在一些Javascript库,这些库似乎使IE8与Canvas兼容。 我已经阅读了他们的全部资料,但我不明白他们是如何使Canvas与IE8一起工作的。有人可以介绍一下使用的方法吗? 问题答案: 该页面正在使用excanvas-一个JS库,可使用IE的VML渲染器模拟canv