我正在尝试将对象存储在redis中,这是一个类的实例,因此具有函数,这是一个示例:
function myClass(){
this._attr = "foo";
this.getAttr = function(){
return this._attr;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将这个对象与函数一起存储在redis中?我试过JSON.stringify()但只保留了属性.如何存储函数定义并能够执行以下操作:
var myObj = new myClass();
var stringObj = JSON.stringify(myObj);
// store in redis and retreive as stringObj again
var parsedObj = JSON.parse(stringObj);
console.log(myObj.getAttr()); //prints foo
console.log(parsedObj.getAttr()); // prints "Object has no method 'getAttr'"
Run Code Online (Sandbox Code Playgroud)
我怎么才能foo打电话parsedObj.getAttr()?
先感谢您!
编辑
有建议修改MyClass.prototype并存储值,但是这样的东西(除了setter/getter之外的函数):
function myClass(){
this._attr = "foo";
this._accessCounts = 0;
this.getAttr = function(){
this._accessCounts++;
return this._attr;
}
this.getCount = function(){
return this._accessCounts;
}
}
Run Code Online (Sandbox Code Playgroud)
我试图说明一个函数,除了做其他的东西之外,它会在调用时计算类似计数或平均值的函数.
我有一个客户端/服务器应用程序使用服务器上的nodejs和socket.io作为连接机制.由于与我的应用程序相关的原因,我希望每个浏览器只有一个活动连接,并拒绝来自其他选项卡的所有连接,这些连接可能会在会话期间稍后打开.这个伟大的工程使用WebSockets,但是如果的WebSockets不是由浏览器和XHR轮询支持来代替,断开不会发生,因此,如果用户只需刷新页面,这不被解释为再连接(我有一个延迟重新连接和会话恢复),但作为一个新选项卡,在连接中结束被拒绝,因为此相同选项卡生成的旧连接仍处于活动状态.
我正在寻找一种方法,以便在发生刷新时从客户端有效地结束连接.我已经尝试绑定到客户端beforeunload并调用socket.disconnect()它,并且还发送了一条消息,socket.emit('force-disconnect')并且触发了与服务器的断开连接,但没有成功.我在这里错过了什么吗?感谢您的帮助!
我已经阅读了这个问题,并且发现它对我的特定情况没有用.
我试图通过从保存所有数据的常规数据结构切换到使用 redis 和集群来扩展我的 socket.io 应用程序。但是,我遇到了一些问题,因为在当前实现的某个时刻,我将套接字对象以及其他属性存储在该数据结构中,data[socket.id].socket = socket因为在我的应用程序中有时我需要data[someId].socket.disconnect()手动断开套接字。
我知道我无法将对象直接存储到redis中,所以我尝试使用JSON.stringify(socket)但没有成功,因为socket是循环的。是否有另一种方法仅使用 来断开套接字id?这样我就可以id像这样存储data[socket.id].id = socket.id,也许可以称之为类似data[someId].id.disconnect()的东西。所以基本上我正在寻找一种方法来断开套接字,而无需访问实际的套接字对象(我确实可以访问该io对象)。
感谢大家的帮助。