Публікація

Про Web Worker та обробку онолень для клона Reddit

Ще раз уточнюю структуру того як влаштовані оновлення, як відбувається отримання оновлень на клієнті

Стрічка оновлень користувача знаходиться за адресою /u/:user_id/updates.json яка представляє собою JSON Feed. Стрічка утримає оновлення користувача за останній день та посилання на стрічку за попередній день.

Нове створене оновлення попадає в таблицю D1 updates. Оновлення представляє собою наступну структуру:

1
2
3
4
5
6
7
{
	id: 'SHORT_UUID',
	type: '1-post|2-comment|3-repost|4-react|5-subscribe',
	user_id: 'SHA1',
	date: 'UNIX_TIMESTAMP',
	data: {}
}

data відрізняється для кожного типу оновлень:

Для post:

1
2
3
4
5
{
	title: '',
	description: '',
	image: '', url: ''
}

Для comment:

1
2
3
4
5
{
	parent: null,
	text: ''
	url: ''
}

Для repost:

1
2
3
{
	url: ''
}

Для react:

1
2
3
4
{
	update_id: 'SHORT_UUID',
	type: '1-thumb_up|2-thumb_down|3-...'
}

Для subscribe:

1
2
3
{
	uri: '/u/:user_id|/m/:mirror|/p/:post_id'
}

Індексатор

Стрічку користувача формує серверний скріпт, який зчитує оновлення за останні 24 години та створює або оновлює файли:

  • /u/:user_id/updates.json – оновлення корстувача за останні 24 години з посиланням на попередню дату;
  • /u/:user_id/:year/:month/:day/updates.json – копія /u/:user_id/updates.json – оновлення корстувача за останні 24 години з посиланням на файл updates.json попередньої дати – попередню дату бере з dates.json;
  • /u/:user_id/dates.json  – зчитує файл, перевіряє наявність сьогоднішньої дати, якщо дати немає – додає та оновлює файл, якщо дата є – нічого не робить;
  • /updates.json – оновлення всіх користувачів за останні 24 години;
  • /dates.json - зчитує файл, перевіряє наявність сьогоднішньої дати, якщо дати немає – додає та оновлює файл, якщо дата є – нічого не робить;
  • /p/:post_id/:year/:month/:day/updates.json – зчитує файл, додає оновлення та записує посилання на попередню дату – попередню дату бере з dates.json;
  • /p/:post_id/updates.json – зчитує файл, додає оновлення та записує посилання на попередню дату;
  • /p/:post_id/dates.json – зчитує файл, перевіряє наявність сьогоднішньої дати, якщо дати немає – додає та оновлює файл, якщо дата є – нічого не робить.

Структура /dates.json:

1
[20240101, 20240102]

Види фідів

  • S3 s.server.com/updates.json – фід з оновленнями за останні 24 години
  • S3 s.server.com/u/:user_id/updates.json – фід з оновленнями користувача за останні 24 години
  • S3 s.server.com/p/:post_id/updates.json – фід з оновленнями поста за останні 24 години
  • Function server.com/m/:mirror/updates.json – дзеркало-фід з оновленнями з інших веб-ресурсів
Публікація захищена ліцензією CC BY 4.0 .

© jmas. Деякі права захищено.

Powered by Jekyll with Chirpy theme