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

Smalltalk 如何在pharo中刷新JSON文件一段时间,smalltalk,pharo,pharo-5,Smalltalk,Pharo,Pharo 5,基本上,我使用标识与pharo连接到服务器。然后,我使用Znclient访问myserver/json文件,该文件包含键和值的集合。如何在不耗尽内存的情况下每40秒刷新一次这个Json文件,以及如何迭代它以收集特定的密钥 这就是我到目前为止所做的 " Login " "********************************************************" |a data|

基本上,我使用标识与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>'.
只要不存储每次调用返回的所有
数据
,就不会有内存问题


如果您的数据表示一个字典,那么
NeoJSON
将返回一个字典对象,您可以使用
at:
消息获取该值。您可以检查
数据
对象以查看返回的内容。

您可以创建一个循环来执行此操作并等待40秒:

process := [ [ self shouldStillRun ] whileTrue: [ 
      self fetchDataAndDoWork.
      40 seconds asDelay wait. ] ]
   forkAt: Processor userBackgroundPriority
   named: '<processName>'.
只要不存储每次调用返回的所有
数据
,就不会有内存问题


如果您的数据表示一个字典,那么
NeoJSON
将返回一个字典对象,您可以使用
at:
消息获取该值。您可以检查
数据
对象以查看返回的内容。

我的意思是使用TaskScheduler类的block do:every:。这也行吗

scheduler:=TaskScheduler新建。
调度程序启动。
“每40秒刷新一次”
调度程序
do:[一个get:'https://MyServer/json'.
成绩单显示:“令人耳目一新……”;cr。
数据:=NeoJSONReader fromString:a内容;cr。

每隔:60秒
我的意思是使用类TaskScheduler的block do:every:。这也行吗

scheduler:=TaskScheduler新建。
调度程序启动。
“每40秒刷新一次”
调度程序
do:[一个get:'https://MyServer/json'.
成绩单显示:“令人耳目一新……”;cr。
数据:=NeoJSONReader fromString:a内容;cr。

每隔:60秒
谢谢。我会试试这个。你知道调度器是否也会这样做吗?你说的调度器是什么意思?有
DelayScheduler
类,但它在内部用于实现等待机制。我的意思是使用类TaskScheduler的block Do:every:。这也行吗?谢谢。我会试试这个。你知道吗w如果调度器也会这样做?你说的调度器是什么意思?有
DelayScheduler
类,但它在内部用于实现等待机制。我的意思是使用类TaskScheduler的block do:every:。这也行吗?是的,这也行。为此,你需要加载TaskScheduler项目。以前的解决方案是为了一个普通的Pharo图像。@AndreiChis这样也不会耗尽内存,对吗?是的,不应该耗尽内存。/@AndreiChis。谢谢。还有一个问题。你认为有可能在每次延迟时返回变量数据的值而不中断循环吗?假设我使用从lo返回值的方法写入它们op将中断循环。如果您需要执行操作,只需调用一个方法并将数据作为参数传递给它。是的,这也可以。为此,您需要加载TaskScheduler项目。以前的解决方案是针对普通Pharo映像的。@AndreiChis所以这样也不会耗尽内存,对吗?是的,不应该耗尽内存/@AndreiChis.谢谢。还有一个问题。你认为有没有可能在不中断循环的情况下在每个延迟返回变量数据的值?假设我将它们写入一个方法,从循环返回值将中断循环。如果你需要执行一个操作,只需调用一个方法并将数据作为参数传递给它即可。