嗨,我正在编写一个简单的nodejs推送通知服务器,它基本上是读取一个动态编辑的json文件并将其内容推送到客户端。在
更新:如果我删除类似的数据=JSON.parse(资料图);有谁能澄清一下吗?
我使用python每5秒编辑一次json文件。但是每次我运行python循环来编辑文件时,节点服务器就会崩溃。但是,如果我在while循环中单独运行相同的代码,则节点服务器可以正常工作。在
节点服务器出现以下错误
debug - cleared heartbeat timeout for client c_u5Oi1eGnwaDerGREMD
debug - set heartbeat interval for client c_u5Oi1eGnwaDerGREMD
{"sample": {"name": "Shubhanshu Mishra100", "networks": ["facebook", "twitter",
"linkedin"]}}
debug - websocket writing 5:::{"name":"notification","args":[{"sample":{"name
":"Shubhanshu Mishra100","networks":["facebook","twitter","linkedin"]},"time":"2
012-10-09T11:24:55.588Z"}]}
{"sample": {"name": "Shubhanshu Mishra100", "networks": ["facebook", "twitter",
"linkedin"]}}
debug - websocket writing 5:::{"name":"notification","args":[{"sample":{"name
":"Shubhanshu Mishra100","networks":["facebook","twitter","linkedin"]},"time":"2
012-10-09T11:24:55.589Z"}]}
{"sample": {"name": "Shubhanshu Mishra200", "networks": ["facebook", "twitter",
"linkedin"]}}
debug - websocket writing 5:::{"name":"notification","args":[{"sample":{"name
":"Shubhanshu Mishra200","networks":["facebook","twitter","linkedin"]},"time":"2
012-10-09T11:25:00.598Z"}]}
{"sample": {"name": "Shubhanshu Mishra200", "networks": ["facebook", "twitter",
"linkedin"]}}
debug - websocket writing 5:::{"name":"notification","args":[{"sample":{"name
":"Shubhanshu Mishra200","networks":["facebook","twitter","linkedin"]},"time":"2
012-10-09T11:25:00.619Z"}]}
undefined:0
^
SyntaxError: Unexpected end of input
at Object.parse (native)
at F:\My Codes\NodeJs\PushNotification\server.js:25:16
at fs.readFile (fs.js:176:14)
at Object.oncomplete (fs.js:297:15)
我正在读响应.json文件中使用以下代码节点.js在
^{pr2}$更新:如果我删除类似的数据=JSON.parse(资料图);有谁能澄清一下吗?
每次单独调用python脚本时,我的python代码是:
import json
import time
jsonStr = {
"sample": {
"name": "Shubhanshu Mishra",
"networks": [
"facebook",
"twitter",
"linkedin"
]
}
}
i = 0
jsonStr['sample']['name'] = "Shubhanshu Mishra" + str(i);
fStr = json.dumps(jsonStr)
with open('response.json', 'w') as f:
f.write(fStr)
f.closed
然而,当我在一个while循环中封装同样的代码,睡眠时间为5秒时,我得到了上面提到的错误。while循环的代码是:
while True:
i += 100
print i
jsonStr['sample']['name'] = "Shubhanshu Mishra" + str(i);
fStr = json.dumps(jsonStr)
#f = open("response.json", "w")
with open('response.json', 'w') as f:
f.write(fStr)
f.closed
#f.write(fStr)
print "Written to file: " + fStr
#f.close()
time.sleep(5)
发生的情况是这样的:Python首先清除文件,然后写入字符串。节点在文件被清除后立即激发事件,并读取(空)文件。然后,尝试JSON解析一个空字符串,就会得到错误。在
问题是,当您手动运行简单的python脚本(没有while循环)时,为什么不发生这种情况呢。我不确定,但我知道这与各种竞争条件有关,主要的区别是在循环中,在写入文件之后,它打印一些内容,并休眠一些,在另一种情况下,它只是退出。如果你有同样的(崩溃)行为,我一点也不惊讶,如果你添加了打印和睡眠手册,而自由脚本。在
所以,如何解决这个问题。一种不太好但有效的方法是增加一点睡眠时间,以便完成写入:
因为我希望您从
^{pr2}$fs.watch
得到两个回调,最好是通过下划线来消除它们的影响(实际上忽略第一个):如果忽略错误,我认为它甚至可以像您预期的那样工作(因为在
fs.watch
的第二次回调中,文件将包含正确的数据)。在然而,最后,我认为这并不是将新数据注入运行中的程序的方法。我将使用以下方法之一:
相关问题 更多 >
编程相关推荐