到目前为止,一切都很好。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,还是我的脚本中有什么错误?
让事情变得更疯狂的是,如果我打开开发工具(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