Dal*_*ale 27 javascript sockets stack-overflow stack node.js
我现在有点卡住了,希望有人可以解决一些问题.我对套接字一般来说比较新,但是已经在javascript中打开和关闭了几年,尽管只有完成手头任务所需的深度.因此,我对javascript堆栈堆和一般套接字的一些概念的理解有些局限.好的情况如下:
我创建了一个应用程序,旨在简单地在几台机器上增加一个计数器.有几个用户可以点击"下一步"按钮,它会立即在所有机器上更新.首次连接时,它会检索当前数字,并在本地将其吐出.
我在这里创建了服务器:
var io = require("socket.io");
var sockets = io.listen(8000);
var currentlyServing=0;
sockets.on("connection", function (socket)
{
console.log("client connected");
socket.emit("receive", currentlyServing);
socket.on("update", function(serving)
{
currentlyServing=serving;
if(currentlyServing>100)
currentlyServing=0;
if(currentlyServing<0)
currentlyServing=99;
socket.broadcast.emit("receive", currentlyServing);
console.log("update received: "+currentlyServing);
});
});
console.log("Server Started");
Run Code Online (Sandbox Code Playgroud)
以下是客户端的相关(我希望)摘录:
var socket = io.connect("http://www.sampledomain.com:8000");
//function to update the page when a new update is received
socket.on("receive", function(receivedServing)
{
document.getElementById('msgs').value=""+String("00" + receivedServing).slice(-2);
document.getElementById('nowServing').value=receivedServing;
});
//this is called in an onClick event in the HTML source
//sends the new number to all other stations except this one (handled by server side)
function nextServing()
{
var sendServing = parseInt(document.getElementById('nowServing').value)+1;
socket.emit("update", sendServing);
document.getElementById('nowServing').value=sendServing;
document.getElementById('msgs').value=""+String("00" + sendServing).slice(-2);
}
Run Code Online (Sandbox Code Playgroud)
好的,这是我的问题.这在我放入的每个系统中运行得非常好,平稳而美观 - 除了IE8.如果单独放置超过2-3分钟(根本没有活动),我最终会收到"堆栈溢出"错误.它出现的行号波动(尚未确定所涉及的因素),但它总是在该间隔发生.在一些工作站上,它需要更长的时间,我开始认为它与机器具有的音频RAM的数量直接相关,或者至少分配给Web浏览器的数量.
我发现了一个在线功能来确定"最大堆栈大小",我意识到这不是一个精确的科学,但我确实得到了3000的数字.在我的IE11机器上有相当多的资源,我发现它在面积20,000.这可能不相关,但我认为越多信息越好:)
为了避免此问题,以便最终用户看不到此错误消息,我将整个客户端脚本放入一个iFrame中,每隔60秒重新加载一次,基本上重置堆栈,感觉很脏坐在离网络插座很近的地方,但是我已经把时间花在了这里.我已经谷歌搜索,直到我不能谷歌了,但当你在谷歌搜索"node.js"或"socket.io"以及"堆栈溢出"时,你只是收到很多关于这两个主题的帖子托管在stackoverflow dot com网站上.ARG大声笑
任何人?
2014年11月18日编辑,以下是评论:
错误消息通常在第1056行声称堆栈溢出.IE Developer工具指向文件socket.io.js.1056行是:
return fn.apply(obj, args.concat(slice.call(arguments)));
Run Code Online (Sandbox Code Playgroud)
这是insdie文件的这一部分:
var slice = [].slice;
/**
* Bind `obj` to `fn`.
*
* @param {Object} obj
* @param {Function|String} fn or string
* @return {Function}
* @api public
*/
module.exports = function(obj, fn){
if ('string' == typeof fn) fn = obj[fn];
if ('function' != typeof fn) throw new Error('bind() requires a function');
var args = slice.call(arguments, 2);
return function(){
return fn.apply(obj, args.concat(slice.call(arguments)));
}
};
Run Code Online (Sandbox Code Playgroud)
Jac*_*tal -3
也许尝试更换
""+String("00" + receivedServing).slice(-2)
Run Code Online (Sandbox Code Playgroud)
和
('00' + receivedServing).slice(-2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
876 次 |
| 最近记录: |