Автоматически обновлять sh страницу user1, когда user2 обновляет / добавляет запись в базу данных - PullRequest
0 голосов
/ 02 августа 2020

Я работаю над простым веб-приложением, используя сервер asp. net, sql. Я застрял в какой-то точке, мое требование - автоматически обновлять sh страницу user1, когда user2 обновляет / добавляет запись в базу данных через свою страницу. как пользователь1, так и пользователь 2 обращаются к записям из одной таблицы. Как это сделать?

1 Ответ

0 голосов
/ 03 августа 2020

Как указывает jm c в комментариях; вы не делаете. Вы просто отслеживаете, когда user1 и user2 думают, что строка была изменена (например, каждый человек загружает дату updatedOn строки), а затем, когда приходит время внести правку пользователем2, после слишком долгого ожидания и user1 уже отредактировал строку , затем user2 выдает обновление, например UPDATE person SET name = @newname, updatedOn=getUtcDate() WHERE ID =@id and updatedOn = @updatedOnFromBefore

, потому что каждый пользователь знал старое значение updatedOn, а затем user1 дал правильное значение, когда он вносил свое редактирование, и его редактирование изменило значение updatedOn на что-то другое, теперь это означает, что попытка пользователя2 отредактировать базу данных не удастся, потому что значение, которое user2 запоминает для updatedOn, неверно.

На этом этапе вы можете теперь показать пользователю2 свои изменения, и вы можете запросить базу данных для текущего состояния данных и вы можете дать пользователю user2 выбор: «взять их, взять мой или объединить их вручную» (вы даже можете попробовать объединить автоматически, определив, кто что изменил, но это сложнее). Главное, чтобы при этом не пытались постоянно держать 100 человек, просматривающих данные, в актуальном состоянии; это просто предотвращает конфликты версий в момент сохранения.

Это называется optimisti c concurrency и здесь представлено как простой пример, чтобы вы могли понять процесс. DBS, как SQLServer, имеет специальные c механизмы (rowversion) для этого управления параллелизмом - вы можете прочитать о них, если потребуется, но это работает в основном c способом; что некоторая часть данных, загруженных пользователем2, должна быть той же, чтобы редактирование было успешным

Если вы пишете какую-то другую систему, которая постоянно доставляет обновления в реальном времени, например систему торговли акциями, которая поддерживает актуальность цен в тот момент, когда они происходят, тогда вам нужно взглянуть на что-то вроде signalR, которое позволяет JavaScript приложение на странице, чтобы установить sh постоянное соединение с сервером, чтобы любые обновления, которые сервер должен сделать доступными, мгновенно отправлялись всем клиентам. Я определенно не стал бы использовать его вместо optimisti c concurrency для сохранения данных, но я бы использовал его, например, для создания чата, ленты новостей, курсов акций и т. Д. c

...