如何在pharo中刷新JSON文件一段时间

时间:2018-01-15 07:07:13

标签: smalltalk pharo pharo-5

基本上我连接到使用标识的pharo服务器。然后我使用Znclient来获取myserver / json文件,其中包含key和value的集合。如何在不耗尽内存的情况下每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

2 个答案:

答案 0 :(得分:2)

您可以创建一个完成工作的循环并等待40秒:

process := [ [ self shouldStillRun ] whileTrue: [ 
      self fetchDataAndDoWork.
      40 seconds asDelay wait. ] ]
   forkAt: Processor userBackgroundPriority
   named: '<processName>'.

上面我假设shouldStillRunfetchDataAndDoWork是包含这些代码的类中的方法。如果您想在 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返回,就不会出现内存问题。

如果您的数据代表字典,则NeoJSON将返回字典对象,您只需使用at:消息即可获取该值。您可以检查data对象以查看您获得的内容。

答案 1 :(得分:1)

我的意思是使用块do:every:类TaskScheduler。这会起作用吗?

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