Я создал клиентское серверное приложение для чата без браузера, которое имеет следующие характеристики. 1) Redis используется для хранения содержимого всех каналов чата. 2) IIS является сервером. 3) Клиенты общаются с сервером с помощью веб-сокетов.
В целом это работает, но я должен выяснить проблему. как решить это. Я создал главный поток, созданный инициализатором stati c моего класса, чтобы каждый поток веб-сокетов постоянно опрашивал redis для новых сообщений. Главный поток может просматривать заданный ключ c redis для измененных каналов чата и извлекать самые последние данные, и потоки веб-сокета должны (поток безопасно) проверить эти кэшированные данные на сервере IIS.
Проблемы которые были указаны (я новичок в asp. net, но не c# в целом) 1) Запуск фонового потока в asp. net не очень хорошая идея 2) Pub Sub redis и IIS не очень удачный микс, поскольку его слишком много соединений
Одно из очевидных решений состоит в том, чтобы каждый поток веб-сокетов опрашивал свой конкретный канал, чтобы увидеть, изменилась ли длина, указывая новое сообщение. Но это звучит как очень расточительная реализация, потому что тысячи или 10 тысяч запросов redis каждую секунду будут поддерживать низкую задержку системы (1 на пользователя).
Итак, вопрос в том, могу ли я как-то безопасно ли процесс сортировки захватывать данные недавно измененных записей канала чата redis, чтобы мои потоки веб-сокетов могли быстро проверить их на устаревание?
В случае необходимости мое приложение работает на aws beanstalk, что усложняет работу управлять фоновыми процессами, но не невозможно.
Редактировать: Эта ссылка, кажется, указывает на то, что, возможно, мне не нужно беспокоиться о том, как может выглядеть запрос на повторный запрос: Redis очень быстрый