Обновление страницы, когда кто-то обновляет базу данных Mysql - приложение доставки [dубликат]

Привязка вообще не работает с полями. Большинство привязок основаны, в частности, на модели ComponentModel PropertyDescriptor , которая (по умолчанию) работает над свойствами. Это дает возможность уведомлений, проверки и т. Д. (Ни один из которых не работает с полями).

По другим причинам, чем я могу, публичные поля - плохая идея. Они должны быть свойствами, фактом. Аналогично, изменчивые структуры - очень плохая идея. Не в последнюю очередь это защищает от непредвиденных потерь данных (обычно связанных с изменчивыми структурами). Это должен быть класс:

  [DataContract] public class StatusInfo {[DataMember] public int Total {get; set;} [DataMember] public string Authority {get; set;}}  

Теперь он будет вести себя так, как вы думаете. Если вы хотите, чтобы это была неизменяемая структура, это было бы нормально (но привязка данных была бы только в одну сторону, конечно):

  [DataContract] public struct StatusInfo {[DataMember]  public int Total {get; private set;} [DataMember] public string Authority {get; private set;} public StatusInfo (int total, string authority): this () {Total = total;  Полномочия = полномочия;  }}  

Однако я бы сначала спросил, почему это структура в первую очередь. Редактировать структуру на языках .NET очень редко. Имейте в виду, что прокси-сервер WCF «mex» будет создавать его как класс у потребителя в любом случае (если вы не используете совместное использование сборок).


В ответ на ответ «why use structs» ( «unknown (google)»):

Если это ответ на мой вопрос, это неправильно во многих отношениях. Во-первых, типы значений как переменные обычно выделяются (сначала) в стеке. Если они попадают в кучу (например, в массиве / списке), нет большой разницы в накладных расходах от класса - небольшой бит заголовка объекта плюс ссылка. Структуры всегда должны быть маленькими. Что-то с несколькими полями будет чрезмерно крупным и будет либо убивать ваш стек, либо просто вызвать медленность из-за блуждания. Кроме того, структуры должны быть неизменными - если вы действительно не знаете, что делаете.

Практически все, что представляет объект, должно быть бескомпромиссным.

Если вы попадаете в базу данных, скорость struct vs class является не-проблемой по сравнению с выходом из процесса и, вероятно, по сети.

Как некоторые метрики над объектами 1M:

  Как и некоторые метрики над объектами 1M: 

   struct / field: 50ms class / property: 229ms  

на основе следующего (разница в скорости в распределении объектов, а не в поле vs). Так что примерно в 5 раз медленнее, но все же очень, очень быстро. Поскольку это не будет вашим узким местом, преждевременно не оптимизируйте это!

  используя System;  используя System.Collections.Generic;  используя System.Diagnostics;  struct MyStruct {public int Id;  public string Name;  public DateTime DateOfBirth;  public string Комментарий;  } class MyClass {public int Id {get;  задавать;  } public string Имя {get;  задавать;  } public DateTime DateOfBirth {get;  задавать;  } public string Комментарий {get;  задавать;  }} static class Program {static void Main () {DateTime dob = DateTime.Today;  const int SIZE = 1000000;  Часы секундомера = секундомер.StartNew ();  Список & л; MyStruct & GT;  s = новый список & lt; MyStruct & gt; (SIZE);  for (int i = 0; i & lt; SIZE; i ++) {s.Add (новый MyStruct {Комментарий = "abc", DateOfBirth = dob, Id = 123, Name = "def"});  } watch.Stop ();  Console.WriteLine ("struct / field:" + watch.ElapsedMilliseconds + "ms");  watch = секундомер.StartNew ();  Список & л; МойКласс & GT;  c = новый список & lt; MyClass & gt; (SIZE);  for (int i = 0; i & lt; SIZE; i ++) {c.Add (новый MyClass {Комментарий = "abc", DateOfBirth = dob, Id = 123, Name = "def"});  } watch.Stop ();  Console.WriteLine ("class / property:" + watch.ElapsedMilliseconds + "ms");  Console.ReadLine ();  }}  
17
задан Jacob Huggart 11 May 2010 в 19:23
поделиться

8 ответов

использовать функцию setinterval javascript для опроса и проверить значение обновленного поля dababase

проверить следующую ссылку для более подробной информации http://www.elated.com/articles/javascript- таймеры-с-SetTimeout-и-setinterval /

5
ответ дан Pranay Rana 15 August 2018 в 21:17
поделиться

В основном вам придется постоянно опробовать сервер для изменений в БД. Сервер не может позвонить клиенту, поэтому клиенту просто нужно постоянно спрашивать сервер, были ли изменения.

0
ответ дан aepheus 15 August 2018 в 21:17
поделиться

Я бы предложил создать HTML-страницу, которая использует setIntreval (), чтобы неоднократно совершать вызовы AJAX скрипту PHP, который запрашивает вашу базу данных. Вы можете использовать JSON и PEAR, чтобы облегчить задачу.

Ссылки:

1
ответ дан gurun8 15 August 2018 в 21:17
поделиться
  • 1
    Понял. Большое спасибо. Ваш метод работает отлично! Просто не могу установить слишком низкий интервал или проблемы с открытием / закрытием считывателей данных. – Jacob Huggart 11 May 2010 в 20:32

Подключите специальную хранимую процедуру в вашу базу данных, которая оповещает ваше приложение после изменения. Вам понадобится настраиваемый модуль и правильные триггерные операторы.

Другой вариант - опрос.

2
ответ дан Jeff Ferland 15 August 2018 в 21:17
поделиться
  • 1
    Как это будет предупреждать приложение, которое находится в браузере клиента? – Nelson Rothermel 11 May 2010 в 19:27
  • 2
    Приложение состоит из двух частей: в браузере и на веб-сервере. Бэкэнд-веб-служба отвечает за разговор с базой данных, если только пользователь не использует стиль .0000001% того, что браузер говорит SQL с базой данных. – Jeff Ferland 11 May 2010 в 19:29
  • 3
    +1 для способа предотвращения «опроса базы данных», даже если это не предотвращает «опрос клиентов на сервер», – Nelson Rothermel 11 May 2010 в 19:52

Вам придется постоянно опробовать страницу, которая имеет значение из базы данных.

1
ответ дан Mitch Dempsey 15 August 2018 в 21:17
поделиться
  • 1
    Не обязательно. Доступны методы push. – Robert Harvey♦ 11 May 2010 в 19:28
  • 2
    @RobertHarvey Такие как? можете ли вы дать такое? – Diyoda_ 1 January 2014 в 19:23

Сервер (база данных / сеть) не может инициировать соединение - только клиент может. Поэтому вам придется опросить базу данных до тех пор, пока не появится обновление. Вы можете создать веб-сервис, который проверяет базу данных и какой jQuery использует.

Изменить: Я стою исправлено. Можно поддерживать соединение AJAX открытым до тех пор, пока сервер не «подталкивает» данные к нему. См .: http://en.wikipedia.org/wiki/Reverse_Ajax

И, по-видимому, это действительно опрос: http://en.wikipedia.org/wiki / Push_technology # Long_polling . Если сервер еще не имеет данных для отправки, он держит соединение открытым до тех пор, пока оно не произойдет. Это не «чистая» технология push, потому что клиент не имеет порта прослушивания, к которому подключается сервер. Эффект схож, однако.

Редактировать 2: Вернемся к ответу на ваш вопрос ... Вам нужно будет выбрать, как «опросить» веб-службу. Затем веб-службе необходимо проверить базу данных, чтобы узнать, есть ли обновления. Проверка базы данных на обновления может оказаться сложной и действительно зависит от ваших требований. Вы можете запустить SQL-запрос, чтобы узнать, что-то изменилось, но как вы узнали? Для сравнения вам понадобится какой-то параметр (обычно дата). Если все сделано неправильно, вы можете пропустить некоторые обновления или иметь несколько обращений за одним обновлением. То, что сказал автократия, было бы хорошим способом получить уведомление об обновлениях. Вы можете сохранить этот список в базе данных, в памяти и т. Д. И очистить его, когда клиент получит обновления.

5
ответ дан Nelson Rothermel 15 August 2018 в 21:17
поделиться

Я делаю почти то же самое с чатом, перезагружает php-скрипт каждые xx сек.

Выглядит так: замените j на $, если не используете jquery.noconflict ..

   j (". chatref"). everyTime (3000, function (i) {j.ajax ({url: "chatx.php", cache: false, success: function (updated) {j (". chatref"  ) .html (обновлено); ... do stuff ..}});  

Это очень хороший метод, который я думаю :), если вы хотите отправить vars в chatx.php просто add? php & amp; x = 1 & amp; y = 2?>

3
ответ дан NewUser 15 August 2018 в 21:17
поделиться

То, что вы описываете, называется разговорным языком Comet . Комета описывает группу методов для продвижения контента на веб-страницу с постоянным HTTP-соединением.

Пуск будет инициирован с использованием комбинации триггера / хранимой процедуры на сервере базы данных. Таким образом, это происходит независимо от того, откуда происходит обновление данных.

11
ответ дан Robert Harvey 15 August 2018 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: