Wx_chat_yj
Я работал в IM некоторое время, и на этот раз я записал несколько подводных камней, с которыми сталкивался раньше. Я поделюсь часть чата позже. Я надеюсь, что это будет полезно для всех. Среди проектов, которые я наблюдал в Интернете раньше, я редко говорил о столкновении подводных камней в процессе разработки. Если вы пишете чат в первый раз, вы можете столкнуться с большим количеством проблем. Здесь я в основном расскажу о ловушках, с которыми я столкнулся. Все могут сфотографироваться. Пожалуйста, дайте мне разные мнения, спасибо. Все делают прогресс вместе!
Если это полезно для вас, помните звезды!
Основные функции включают
Возвращение, удаление, копирование сообщений
Голос, текст, картинки
Количество непрочитанных людей
Другие стили сообщений, настроенные в проекте
В реальных проектах есть облачный диск, воспроизведение видео и круг друзей ...
1. Начните с фреймворка


2. В базе данных используется WeChat Open Source WCDB без написания оператора SQL.
3. Я столкнулся с некоторыми из следующих ошибок
1. Задержка интерфейса
- При использовании макета интерфейса используется сторонняя вычисление автоматической высоты ячейки. Поскольку есть много стилей проекта чата, при использовании макета XIB выкладывается только левые и правые стили, а стиль контролируется, скрываясь и отображая. Из -за разработки я не использовал слишком много данных для тестирования, что заставило меня быть очень заиканным, когда было слишком много данных. Босс говорил о Какаке, которая была еще более заикающей, чем старая корова, тянущая сломанную машину. Этот вид заикания явно ощущался при скольжении на странице.
После поиска причины проблемы, следующее решение:
Во -первых, вручную рассчитать высоту и разрешить конфликты в макете XIB. Гладкость скользящей страницы приемлема. Конечно, может быть лучше достичь лучшего плавного макета рамы.
В то же время, когда XIB использует макет XIB, постарайтесь иметь как можно меньше уровней. Больше уровней будет влиять на свободу.
2. Задержка данных
- Вначале, поскольку мы были вовлечены в обработку количества непрочитанных людей на сообщение, мы заменили текущую модель сообщения чата через непрочитанные номера квитанции на сервер. Когда количество болтовни достигает определенного уровня, все больше людей будут читать новости. Квитанции часты в это время. Когда квитанция возвращается, чтобы обновить определенные данные, интерфейс снова появляется. В ходе этого процесса нечищенные обрабатываются. Есть некоторые проблемы с клиентом. При скольжении на странице отправьте в данный момент непростокое сообщение на сервер. Сервер успешно возвращает его, чтобы указать, что он был прочитал. Сообщения сервера находятся в очереди и часто принимаются на сервер. Серверы часто подталкиваются к клиентам. Это заставляет обновление страницы быть слишком частым. Это застряло на нашей клиентской стороне. (Проблема с заменой сообщений в настоящее время состоит в том, чтобы найти данные, которые будут заменены во время текущего обхода сообщения)
После поиска основной причины проблемы, для ее решения использовались следующие методы:
- Сохраните сообщения, которые вы отправляете отдельно, и замените нечитанный номер, необходимый только для замены отправленного в настоящее время.
- И при определении высоты (HeightForrowAtIndexPath) помещает текущую позицию сообщения в каждой модели. При замене сообщений вы можете быстро прочитать и найти сообщение, которое нужно заменить по мере необходимости. Никогда не пишите здесь CellForroworAtIndexPath, чтобы определить местоположение. В противном случае, это будет афера снова.
Свободное владение вышеуказанным методом в основном соответствует требованиям. Найдите только данные, которые будут заменены из отправленных вами сообщений, и местоположение было определено. Просто замените его напрямую.
3. Застревание сообщения о чтении базы данных застряло
- Вначале мы использовали FMDB.
- При хранении данных данные модели сохраняются напрямую, и обнаруживается, что, когда есть много данных, они снова заикаются. (Мы не использовали это хорошо) Я чувствую себя быстрее при сохранении, но когда я читаю это, я застрял, когда получаю слишком много данных. Здесь есть еще один, который должен передавать изображение в данные и сохранить его. Когда вы впервые вводите страницу, если у вас есть десятки изображений подряд, вам придется подождать некоторое время, когда вы вносите снаружи. Главная нить застряла.
Мы решим проблему, когда найдем ее:
- Мы используем WeChat Open Source WCDB для базы данных, которая более приятна во всех аспектах. Не нужно благодарить заявления SQL.
Если вы сохраните модель, вы также получите модель без какого -либо отставания.
- Для обработки изображений мы используем изображение для данных для хранения песочницы, и используем ключевые поля в адресе изображения и сообщении в качестве ключей для хранения песочницы. В настоящее время база данных должна хранить адрес. На основе ключа в качестве этого адреса найдите изображение. После десятков протестированных фотографий я этого не чувствовал. Здесь мы только кэшируем фотографии, которые мы разместили. Изображение другой стороны Sdwebimageview кэшируется. Цель кэширования вашего собственного изображения - отправить его на использование для обработки. Здесь мы используем кэш nscache для обработки кода в коде ...
4. Когда страница полна выражений, она застряла
- После приведенного выше лечения беглость уже приемлема.
Но однажды коллега опубликовал всю страницу, которая была полна выражений на системной клавиатуре, и я снова застрял. И другие коллеги также опубликовали, что это Какака, которую каждый может понять (и, кроме того, в нашей компании существует тестовая ситуация, которая заключается в том, что каждый тестирует полчаса каждый день с понедельника по пятницу и полчаса каждые ночи на выходных. Босс и все сотрудники есть). Потому что мы используем обычные Uilable без какой -либо обработки.
Это то, что я помнил о Yylable, асинхронном рендеринге, что делает интерфейс более гладким и более гладким. После замены плавность сильно увеличилась.
5. Серьезно пропустили новости
- После того, как первая версия чата вышла, несколько человек проверили его вместе. Утечка была обнаружена очень серьезной. После расследования возникли важные проблемы, когда мы хранили новости.
- Текущее решение:
- Согласно сообщению, выдвинутому гнездам, если сокет подключен, оно будет сохранено.
- А после получения сообщения он возвращается на сервер (сервер получает самое большое сообщение в тот момент, когда интервал очень короткий). Если квитанция нет, сервер будет выдвигать несколько сообщений при отправке сообщений, и вы должны организовать тяжелые нагрузки самостоятельно.
- Более того, когда сеть отключает розетку и воспроизводит подключения, она также будет развлекать сообщения, эффективно обеспечивая данные
6. Поговорим о задержке нескольких аватаров
Здесь мы хотим сделать аватары из 9 человек, таких как Dingtalk и WeChat. И когда нет аватара, последнее слово имени должно отображаться в месте аватара.
Здесь я использовал 9 кнопок, которые можно использовать для изображений и текста. Я думал, что это застряло, когда было много данных, когда я написал их, но в результате я рассчитал позицию регулировки кадры на основе фактического количества аватаров и спрятал кнопки, которые не были необходимы. После результата был написан. Эффект довольно хорош. Свободное владение может соответствовать требованиям. Просто скажите, что этот аватар был написан тремя людьми. Эй, Хей.
7. Содержание все еще улучшается ...