我有一个node.js,监视器是Firebase上的一个队列,用于发送GCM推送通知.工作良好.
它还会更新firebase上的"在线"状态.onDisconnect(),因此可以轻松查看Node.js服务器是否在线并正在运行.
问题:一段时间后,即使听众仍然连接并且运行正常,它也会显示"已断开连接".
const NODESERVERONLINE="NodeSeverStatus";
var ref = new Firebase(FBURL+FBKEY_GCM_QUEUE);
ref.child("NODESERVERONLINE").set("Online");
ref.child("NODESERVERONLINE").onDisconnect().set("Offline!");
ref.on("child_added",function(snapshot, prevChild){
If (snapshot.key()!=NODESERVERONLINE) DO_GCM_PUSH(snapshot.val());
}, function(errorObject){
console.log("Error reading Firebase: " + errorObject.code);
});
Run Code Online (Sandbox Code Playgroud)
最初,侦听器正在运行,-NodeSeverStatus显示在线.
但是"一段时间后"(几个小时),侦听器仍然正常运行,并且正在处理队列,但NodeServerStatus现在显示为Offline.
我可以在侦听器本身内移动在线/离线代码,但这似乎只是一个丑陋的黑客攻击,如果在超时期限内没有新的队列帖子,可能会有相同的问题.
这里的最佳做法是什么?谢谢.
创建一个 node.js 以自动下载一个 zip 文件,其中包含一个文本文件,其中包含 5000 个用户 ID 和用户名 (CSV) 的列表。一个示例文本文件是:
12345,JSmith
728422,YPatel
每次我运行这个,我都会得到不同的结果。我认为可能的原因是我试图在解压缩完成保存到磁盘之前解析解压缩的文件。
在尝试解析提取的文件之前,有没有办法异步解析解压缩的数据,或者至少等到解压缩完成?(我也很乐意从内存中完成整个过程,并避免使用磁盘)
我对 node.js 很陌生。
function downloadAndUnzip(URL, doWhenFinished){
require('request')
.get(URL)
.on('error', function(error) {
console.log(error)
})
.on('end', doWhenFinished)
.pipe(require('unzip').Extract({path:'./'}))
}
var parseFile = function(){
var fs = require('fs')
var array =
fs.readFileSync('usernames.txt').toString().split("\n\r");
for (i in array) {
user = array[i].split(",");
console.log("UserID: " + user[0] + " Username: " + user[1]);
}
}
}
DownloadAndUnzip(URL, parseFile())
Run Code Online (Sandbox Code Playgroud) 试图了解如何在Firebase中实现嵌套列表。
可以解决的问题:1-to-N消息传递系统,对于每个消息,您希望维护一个已接收和阅读该消息的用户列表。
阅读了“ Firebase中阵列的最佳实践”。尝试避免使用数组,因为我要同时进行写操作,而在这里似乎并不是一个好的选择。
当前试图通过在每个消息下存储子树来实现此目的,每个子树是已接收,读取或以其他方式对消息Y执行某些操作X的用户列表
"msgid0" : {
"authorID": "uid0",
"msg" : "message text",
"ReceivedBy": {
uid1 : true,
uid2 : true
}
"ReadBy" : {
uid1 : true
}
}
Run Code Online (Sandbox Code Playgroud)
问题:是否可以将这样的嵌套数据结构直接放入单个对象中?
我正在粗略尝试以下测试用例:
public class Message {
private Long authorID;
private String msg;
private List<String> receivedBy;
private List<String> readBy;
}
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot i: dataSnapshot.getChildren()){
Message_FB msg = i.getValue(Message_FB.class);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是它失败了:
引起原因:com.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT令牌中反序列化java.util.ArrayList实例
如何对不同长度的列表进行按元素相加?
假设缺失元素为“0”。
注意:len(a) 始终小于或等于 len(b)
例子:
a=[1,2,3]
b=[1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
期望的结果:
result=[2,4,6,4,5]
Run Code Online (Sandbox Code Playgroud)
我几乎可以,但不能完全做到这一点:
result=[sum(n) for n in zip(a,b)]
Run Code Online (Sandbox Code Playgroud)
在进行压缩之前,是否可以自动将“0”元素附加到(列表 a),使其与(列表 b)长度相同?如果这是一个很好的 Pythonic 解决方案,那么我们会怎么做呢?