res2001
Silver Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Mark_Titov Цитата: Вообщем можно же так сделать? | Конечно, почему бы и нет. Там, конечно, есть блокировки при отправке сообщения, но не гарантировано выведение каждого сообщения для всех пользователей. Ты еще не натыкался на ситуацию, когда то сообщение не вывелось у кого-нить? Надо устроить нагрузочный тест Могу предложить для решения этой проблемы такую схему: Каждое сообщение сохраняется в файл с уникальным именем, соответствующим определенной маске, чтоб можно было отфильтровать файлы для нужной комнаты. Когда отрисовывается экран чата, сканируется каталог с файлами сообщений и определяется какой файл мы еще не вывели, нужные файлы выводим. Получать список файлов надо в отсортированном по дате модификации виде. Отобрать не выведенные легко с помощью dir /b | finstr /v /G:<файл строк>. Надо будет вести отдельно для каждого юзера <файл строк>, т.е. файл со списком уже отображенных файлов сообщений. Можно этот файл делать локальным во временной папке. Удалять старые файлы сообщений можно, например, следующим образом. Когда процесс чата какого-либо пользователя закончил отображение он может провести между собой, что-то типа выборов - будем удалять старые файлы или нет. Сделать это легко с помощью %RANDOM%а. Если решено, что удалять, то удаляем все файлы, созданные не в текущий час, текущего дня. Таким образом увеличивается шанс, что все сообщения отобразятся у всех пользователей, не сильно захламляем каталог с сообщениями, и уходим от постоянного сканирования каталога с сообщениями на предмет поиска старых файлов. Чтоб еще больше увеличить вероятность отображения всех сообщений у всех пользователей можно проводить выборы только если количество минут >30, например. |