Как я могу обновить JSON-файл на определенный период в pharo
В основном я подключился к серверу с pharo, используя идентификацию. Затем я использовал Znclient, чтобы получить файл myserver/json, который содержит коллекцию ключей и значений. Как я могу обновлять этот файл Json каждые 40 секунд, не исчерпывая память, и Как я могу выполнить итерацию по нему, чтобы собрать определенный ключ?
Это то, что я сделал до сих пор
" 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 ответа
Вы можете создать цикл, который выполняет работу и ждет 40 секунд:
process := [ [ self shouldStillRun ] whileTrue: [
self fetchDataAndDoWork.
40 seconds asDelay wait. ] ]
forkAt: Processor userBackgroundPriority
named: '<processName>'.
Выше я предполагаю, что shouldStillRun
а также fetchDataAndDoWork
являются методами в классе, содержащем этот код. Если вы хотите поиграть с этим кодом на игровой площадке, замените их на несколько пользовательских фрагментов кода. Например:
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
объект, чтобы увидеть, что вы получите обратно.
Я имел в виду использование блока 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