Похоже, вам нужна расширенная версия уведомления толчка. Я бы предложил использовать push для всех сообщений, он доставляется быстрее, и я считаю его более надежным. Просто попросите клиента подключиться к серверу сообщений и поддерживать соединение открытым. Всякий раз, когда сообщение должно отображаться клиенту, сервер нажимает его на соединение (откуда и происходит название).
Чтобы группировать и управлять клиентами, вы можете использовать базу данных, это, вероятно, лучший способ, но сервер должен обрабатывать все открытые соединения, а базы данных могут хранить только DATA, а не виртуальные объекты, представляющие соединение, поэтому серверное программное обеспечение должно управлять ими по-другому.
Мое предложение: всякий раз, когда сервер получает входящее клиентское соединение, он принимает и запрашивает на клиентском компьютере идентификационный номер, который также будет использоваться для поиска информации о клиенте в базе данных.
Затем он создаст словарь, используя этот идентификатор в качестве ключа, и соединение в качестве значения. Этот способ во время отправки сообщения определенной группе можно сделать двумя способами:
1) Вы можете загрузить из базы данных идентификаторы, принадлежащие этой группе, а затем отправить им сообщения. Вам нужно будет проверить, существует ли этот идентификатор в массиве KEYS словаря, потому что возможно, что определенный клиент еще не подключен.
2) Вы можете выполнять итерацию массива KEYS словаря, проверить, к какой группе относится этот идентификатор, и если это группа желаний, отправьте ее.
Если вы имеете дело с большим количеством клиентов, я предлагаю вам использовать метод 1.
Чтобы отключить/удалить сообщение с компьютера клиента, просто есть сервер отправить специальное командное сообщение, что клиент программное обеспечение интерпретирует как «удалить это сообщение».Чтобы сделать это возможным, каждое сообщение без команды должно иметь уникальные идентификаторы, так что командные сообщения могут сообщать клиентскому программному обеспечению, к какому сообщению относится эта команда.
Ваш проект звучит очень интересно. Я был бы рад помочь вам, написав библиотеку, которую вы могли бы использовать, или просто помочь вам разобраться в этом, если хотите. (Бесплатно, только для опыта).
Здравствуйте, спасибо за ваш ответ. Может быть, есть способ пойти с SignalR. http://www.asp.net/signalr/overview/getting-started/introduction-to-signalr –
SignalR выполняет эту работу, но не в случае необходимости в настольном приложении. SignalR - это способ иметь эту функциональность между загруженной страницей на компьютере клиента и сервером. Одним из примеров является то, что когда вы открываете Facebook, он создает звук, когда вы получаете сообщение чата. Он будет работать, только если клиент откроет эту страницу. –