Wx_chat_yj
He estado trabajando en IM por un tiempo, y esta vez grabé algunas dificultades que encontré antes. Compartiré la parte de chat más tarde. Espero que sea útil para todos. Entre los proyectos que he estado viendo en línea antes, rara vez hablé sobre encontrar dificultades durante el proceso de desarrollo. Si escribe un chat por primera vez, puede encontrar más problemas. Aquí hablaré principalmente de las trampas que encontré. Todos son bienvenidos a tomar fotos. Por favor, dame diferentes opiniones, gracias. ¡Todos avanzan juntos!
Si es útil para ti, ¡recuerda las estrellas!
Las funciones básicas incluyen
Retracción, eliminación, copia de mensajes
Voz, texto, imágenes
Número de personas no leídas
Otros estilos de mensajes personalizados en el proyecto
En proyectos reales, hay disco en la nube, reproducción de video y círculo de amigos ...
1. Comience con el marco


2. La base de datos utiliza un código abierto de WeChat WCDB sin escribir una declaración SQL.
3. Encontré algunas de las siguientes dificultades
1. Interfaz Lag
- Cuando se usa el diseño de la interfaz, se usa UableView+... se utiliza el cálculo de altura automática de terceros de la celda. Debido a que hay muchos estilos de chat de proyectos, solo se establecen estilos de izquierda y derecha al usar el diseño XIB, y el estilo se controla ocultando y visualizando. Debido al desarrollo, no usé demasiados datos para probar, lo que me hizo estar muy tartamudeado cuando había demasiados datos. El jefe estaba hablando de Kakaka, que era aún más tartamudeante que la vieja vaca tirando de un auto roto. Este tipo de tartamudeo se sintió claramente al deslizar la página.
Después de encontrar la causa del problema, la siguiente solución:
Primero, calcule manualmente la altura y resuelva los conflictos en el diseño XIB. La suavidad de la página deslizante es aceptable. Por supuesto, puede ser mejor lograr un mejor diseño de marco suave.
Al mismo tiempo, cuando XIB usa el diseño XIB, trate de tener la menor cantidad de niveles posible. Más niveles afectarán la fluidez.
2. Retraso de datos
- Al principio, debido a que estuvimos involucrados en el procesamiento del número de personas no leídas por mensaje, reemplazamos el modelo de mensaje de chat actual a través de los números no leídos del recibo del servidor. Cuando el número de charlatán alcanza un cierto nivel, más personas leerán las noticias. Los recibos son frecuentes en este momento. Cuando el recibo vuelve a actualizar ciertos datos, la interfaz vuelve a aparecer. Durante este proceso, se procesan los no leídos. Hay algunos problemas con el cliente. Al deslizar la página, envíe el mensaje actualmente no leído al servidor. El servidor lo devuelve con éxito para indicar que se ha leído. Los mensajes del servidor se ponen en cola y se reciben con frecuencia al servidor. Los servidores son frecuentemente empujados a los clientes. Esto hace que la actualización de la página sea demasiado frecuente. Se atasca en el lado de nuestro cliente. (El problema al reemplazar los mensajes en este momento es encontrar los datos que se reemplazarán durante el recorrido de mensajes actual)
Después de encontrar la causa raíz del problema, se usaron los siguientes métodos para resolverlo:
- Guarde los mensajes que envía por separado y reemplace el número no leído solo necesita reemplazar el enviado actualmente.
- Y al determinar la altura (altura de la interfaz de inicio) coloca una posición de mensaje actual en cada modelo. Al reemplazar los mensajes, puede leer y encontrar rápidamente el mensaje para ser reemplazado según sea necesario. Nunca escriba aquí CellforrowatIndExpath para determinar la ubicación. De lo contrario, sería una estafa nuevamente.
La fluidez del método anterior se cumple básicamente con los requisitos. Solo encuentre los datos que se reemplazarán desde los mensajes que envió, y la ubicación se ha determinado. Simplemente reemplácelo directamente.
3. Mensaje de lectura de base de datos LEST
- Al principio, usamos FMDB.
- Al almacenar datos, los datos del modelo se almacenan directamente, y se encuentra que cuando hay muchos datos, está tartamudeando nuevamente. (No lo usamos bien) Me siento más rápido cuando lo guardo, pero cuando lo leo, me quedo atascado cuando obtengo demasiados datos. Hay otro aquí, que es transferir la imagen a los datos y guardarla. Cuando ingrese por primera vez a la página, si tiene docenas de imágenes seguidas, debe esperar un tiempo cuando haga clic desde el exterior. El hilo principal está atascado.
Resolveremos el problema cuando lo encontremos:
- Utilizamos WeChat Open Source WCDB para la base de datos, que es más agradable en todos los aspectos. No es necesario agradecer a las declaraciones SQL.
Si guarda el modelo, también obtendrá el modelo, sin ningún retraso.
- Para el procesamiento de imágenes, usamos la imagen a los datos para almacenar el sandbox y usamos los campos clave en la dirección de imagen y el mensaje como teclas para almacenar el sandbox. En este momento, la base de datos solo necesita almacenar la dirección. Basado en la clave como esta dirección, encuentre la imagen. Después de que se probaron docenas de fotos, no lo sentí. Aquí solo almacenamos en caché las fotos que publicamos. La imagen de la otra parte SDWebImageView está almacenada en caché. El propósito de almacenar en caché su propia imagen es enviarla a su uso para el procesamiento. Aquí usamos nscache cache para procesar el código en el código ...
4. Cuando la página está llena de expresiones, está atascada
- Después del tratamiento anterior, la fluidez ya es aceptable.
Pero un día, un colega publicó toda la página, que estaba llena de expresiones en el teclado del sistema, y fui y me quedé atascado nuevamente. Y otros colegas también publicaron que era Kakaka, que todos pueden entender (y además, hay una situación de prueba en nuestra empresa, que es que todos prueban media hora todos los días de lunes a viernes y media hora todos los fines de semana. El jefe y todos los empleados están allí). Porque usamos uilable ordinario sin ningún procesamiento.
Esto es lo que recordé de la representación asincrónica yilable, lo que hace que la interfaz sea más suave y suave. Después del reemplazo, la suavidad aumentó mucho.
5. Noticias perdidas graves
- Después de que salió la primera versión del chat, varias personas la probaron juntas. Se encontró que la fuga era muy grave. Después de la investigación, surgieron problemas importantes cuando almacenábamos las noticias.
- Solución actual:
- Según el mensaje presionado por el enchufe, mientras el enchufe esté conectado, se guardará.
- Y después de recibir el mensaje, se devuelve al servidor (el servidor recibe el mensaje más grande en el momento en que el intervalo es muy corto). Si no hay recibo, el servidor presionará múltiples mensajes al enviar mensajes, y debe organizar las cargas pesadas usted mismo.
- Además, cuando la red desconecta el socket y se reconecta, también extraerá mensajes, asegurando efectivamente los datos
6. Hable sobre el retraso de múltiples avatares
Aquí queremos hacer avatares de 9 personas como Dingtalk y WeChat. Y cuando no hay avatar, la última palabra del nombre debe mostrarse en la ubicación del avatar.
Aquí he usado 9 botones, que se pueden usar para imágenes y texto. Pensé que estaría atascado cuando había muchos datos cuando los escribí, pero como resultado, calculé la posición de ajuste de cuadro en función del número real de avatares, y oculté los botones que no eran necesarios. Después de que se escribió el resultado. El efecto es bastante bueno. La fluidez puede cumplir con los requisitos. Solo diga que este avatar ha sido escrito por tres personas. Hola.
7. El contenido aún se está mejorando ...