如何在 pharo 中刷新某个时间段的 JSON 文件
How can I refresh a JSON file for a certain period in pharo
基本上我使用标识连接到带有 pharo 的服务器。然后我使用 Znclient 获取包含键和值集合的 myserver/json 文件。我如何才能每 40 秒刷新一次此 Json 文件而不会 运行 内存不足以及我如何遍历它以收集特定的密钥?
这是我目前所做的
" Login "
"********************************************************"
|a data|
a := ZnClient new.
a get: 'https://MyServer'.
a
headerAt: 'referer' put: 'MyServer';
formAt: 'email' add: 'myEmail';
formAt: 'password' add: 'myPassword'.
a post.
a get: 'MyServer/json'.
" get Json file "
"*******************************************************
data := NeoJSONReader fromString: a contents
您可以创建一个循环来完成工作并等待 40 秒:
process := [ [ self shouldStillRun ] whileTrue: [
self fetchDataAndDoWork.
40 seconds asDelay wait. ] ]
forkAt: Processor userBackgroundPriority
named: '<processName>'.
以上我假设 shouldStillRun
和 fetchDataAndDoWork
是包含这些代码的 class 中的方法。如果您想在 Playground 中使用此代码,请将它们替换为一些自定义代码片段。例如:
shouldStillRun := true.
process := [ [ shouldStillRun ] whileTrue: [
| data |
'<create the client>'
data := NeoJSONReader fromString: a contents.
40 seconds asDelay wait. ] ]
forkAt: Processor userBackgroundPriority
named: '<processName>'.
只要您不在每次调用时存储所有 data
return,您就不会有内存问题。
如果您的数据表示一个字典,那么 NeoJSON
将 return 一个字典对象,您可以只使用 at:
消息来获取值。您可以检查 data
对象以查看返回的内容。
我的意思是使用 class TaskScheduler 的块 do: every: 。那也行吗?
scheduler := TaskScheduler new.
scheduler start.
"refresh every 40 seconds"
scheduler
do: [a get: 'https://MyServer/json'.
Transcript show: 'Refreshing......'; cr.
data := NeoJSONReader fromString: a contents; cr.
every: 60 seconds
基本上我使用标识连接到带有 pharo 的服务器。然后我使用 Znclient 获取包含键和值集合的 myserver/json 文件。我如何才能每 40 秒刷新一次此 Json 文件而不会 运行 内存不足以及我如何遍历它以收集特定的密钥?
这是我目前所做的
" Login "
"********************************************************"
|a data|
a := ZnClient new.
a get: 'https://MyServer'.
a
headerAt: 'referer' put: 'MyServer';
formAt: 'email' add: 'myEmail';
formAt: 'password' add: 'myPassword'.
a post.
a get: 'MyServer/json'.
" get Json file "
"*******************************************************
data := NeoJSONReader fromString: a contents
您可以创建一个循环来完成工作并等待 40 秒:
process := [ [ self shouldStillRun ] whileTrue: [
self fetchDataAndDoWork.
40 seconds asDelay wait. ] ]
forkAt: Processor userBackgroundPriority
named: '<processName>'.
以上我假设 shouldStillRun
和 fetchDataAndDoWork
是包含这些代码的 class 中的方法。如果您想在 Playground 中使用此代码,请将它们替换为一些自定义代码片段。例如:
shouldStillRun := true.
process := [ [ shouldStillRun ] whileTrue: [
| data |
'<create the client>'
data := NeoJSONReader fromString: a contents.
40 seconds asDelay wait. ] ]
forkAt: Processor userBackgroundPriority
named: '<processName>'.
只要您不在每次调用时存储所有 data
return,您就不会有内存问题。
如果您的数据表示一个字典,那么 NeoJSON
将 return 一个字典对象,您可以只使用 at:
消息来获取值。您可以检查 data
对象以查看返回的内容。
我的意思是使用 class TaskScheduler 的块 do: every: 。那也行吗?
scheduler := TaskScheduler new.
scheduler start.
"refresh every 40 seconds"
scheduler
do: [a get: 'https://MyServer/json'.
Transcript show: 'Refreshing......'; cr.
data := NeoJSONReader fromString: a contents; cr.
every: 60 seconds