Optimización parcial de protocolo texto a binario

Feer~

Oráculo Lvl 2
Buenas noches.
Vuelvo a revivir este tema que se discutió muchísimas veces en este foro, y que ya quedó más que claro que hay una gran mejora al pasar todos los códigos de texto a binario, pero la pregunta es otra. Tengo un servidor ya completamente desarrollado, y que se encuentra en línea en este momento, y que fue completamente programado en base a la versión 11.5, por lo que se me hace bastante tedioso hacer todo el cambio de protocolo ya que son MUCHÍSIMOS paquetes. Entonces, quería consultar por si alguno estuvo en la misma situación que yo, o ya se planteo el tema anteriormente y tal vez me pueden ayudar, tengo varias preguntas al respecto.

¿Qué tan viable podría ser realizar un pasaje parcial de texto a binario? Es decir, únicamente por ahora pasaría los paquetes que más se utilizan. Lanzar hechizo, mover, usar item, update pos, make char, dialogos, etcétera. ¿Sería una mejora considerable pasar al menos estos únicos paquetes, o ni vale la pena?

¿Vale la pena "tener dos protocolos"? y de qué manera podría yo diferenciar cada paquete, para que el servidor pueda buscarlo directamente en el handle que corresponde. Osea, lo que quiero decir es que cuando llega un paquete y hay que procesarlo, si dicho paquete está en protocolo texto no quiero que se haga todo el procesamiento del binario hasta llegar al final y recién ahí descartar la opción de que el paquete esté en binario.

Desde ya muchísimas gracias.
 

recox

Argentum Online Libre
Buenas noches.
Vuelvo a revivir este tema que se discutió muchísimas veces en este foro, y que ya quedó más que claro que hay una gran mejora al pasar todos los códigos de texto a binario, pero la pregunta es otra. Tengo un servidor ya completamente desarrollado, y que se encuentra en línea en este momento, y que fue completamente programado en base a la versión 11.5, por lo que se me hace bastante tedioso hacer todo el cambio de protocolo ya que son MUCHÍSIMOS paquetes. Entonces, quería consultar por si alguno estuvo en la misma situación que yo, o ya se planteo el tema anteriormente y tal vez me pueden ayudar, tengo varias preguntas al respecto.

¿Qué tan viable podría ser realizar un pasaje parcial de texto a binario? Es decir, únicamente por ahora pasaría los paquetes que más se utilizan. Lanzar hechizo, mover, usar item, update pos, make char, dialogos, etcétera. ¿Sería una mejora considerable pasar al menos estos únicos paquetes, o ni vale la pena?

¿Vale la pena "tener dos protocolos"? y de qué manera podría yo diferenciar cada paquete, para que el servidor pueda buscarlo directamente en el handle que corresponde. Osea, lo que quiero decir es que cuando llega un paquete y hay que procesarlo, si dicho paquete está en protocolo texto no quiero que se haga todo el procesamiento del binario hasta llegar al final y recién ahí descartar la opción de que el paquete esté en binario.

Desde ya muchísimas gracias.
El famoso protocolo binario que se ve en el AO no es mas que un ENUM
En ves de que el codigo tenga que enviar y verificar que comando es por un string verifica por el valor que tiene en el ENUM y listo.


En cuestion de un par de dias podes pasar el juego entero haciendo todo el test correspondiente, sin testear nada en horas lo tenes hecho...
 

Feer~

Oráculo Lvl 2
El famoso protocolo binario que se ve en el AO no es mas que un ENUM
En ves de que el codigo tenga que enviar y verificar que comando es por un string verifica por el valor que tiene en el ENUM y listo.


En cuestion de un par de dias podes pasar el juego entero haciendo todo el test correspondiente, sin testear nada en horas lo tenes hecho...
Pero no es lo mismo usar readfield para parsear el paquete con separadores como lo hace la 11.5, y ya si vos tenes un paquete que se llama "CLANDETAILS" y lo cambias por un identificador de solo 1 byte supongo que la performance mejora bastante.
Tenes alguna recomendación para que sea más óptimo el protocolo?
 

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador
Moderador de Tecnología
Las cosas que uno tiene que leer...
@Dr. Wolftein @Dr. GoDKeR @Dr. Miqueas150

Reducir el "Protocolo Binario" a un Enum, es simplemente no entender nada de lo básico del código de Argentum.

Después cuando uno entra a explicar las cosas, insultan, así que me voy a abstener, y simplemente me voy a reír de la ignorancia que vienen a esparcir.

ON: Vos hacelo, vas a tener una mejora notable, recordá que el envío de paquetes en el juego pueden llegar a un crecimiento exponencial en ciertas zonas, así que, reducir la cantidad de bytes que enviás por paquete y en general, cambiando el "Protocolo" de cómo enviás los datos, va a ser sustancialmente mejor.

Saludos.
 

Dr. Wolftein

Computer's Scientist
Miembro del equipo
Administrador
Especialista de Tecnología
Buenas Feer~.

Un protocolo binario sobre uno texto como el Argentum, hay mucha diferencia. Empecemos por el simple hecho que no es lo mismo escribir "12341000" (8 bytes) que 12341000 (4 bytes), ni "200" (3 bytes) que 200 (1 byte).

Desde el punto de vista de performance, la serialización es mil veces mas rápido binario que parsear texto, es más, se puede completamente remover el proceso de serialización utilizando otro lenguaje como C++ (mi librería de networking para el oficial toma provecho de eso mismo, y la comparación es abismal). La clase clsByteQueue no es eficiente, y puede ser mejorada x1000 veces, pero es mucho más eficiente que parsear objetos desde texto.

En comparación utilizar un protocolo binario en vez de texto, siempre va a ser mejor, excepto cuando se quiere hacer un prototipo inicial del protocolo donde se utiliza JSON o algún otro formato, ya que no es sólo una enumeración (palabras de un inexperto), sino que involucra mucho más.
 

Kchamarita

Newbie Lvl 2
Una pregunta, como podria mejorar la clase clsByteQueue?
Post automatically merged:

@Dr. Wolftein una pregunta, como podria mejorar la clase clsByteQueue?
 

Dr. Wolftein

Computer's Scientist
Miembro del equipo
Administrador
Especialista de Tecnología
Una pregunta, como podria mejorar la clase clsByteQueue?
Post automatically merged:

@Dr. Wolftein una pregunta, como podria mejorar la clase clsByteQueue?
Utilizando un Circular Buffer con 2 indices (Lectura y Escritura), y solo balancearlo cuando es necesario y no en cada lectura como el clsByteQueue.
 

recox

Argentum Online Libre
Las cosas que uno tiene que leer...
@Dr. Wolftein @Dr. GoDKeR @Dr. Miqueas150

Reducir el "Protocolo Binario" a un Enum, es simplemente no entender nada de lo básico del código de Argentum.
Error, poner en limpio el trabajo que se necesita realizar significa que sabes cuanto tiempo te va a llevar en horas hombre obtener el resultado buscado. No hace falta el analisis teorico para poder llevar el cambio a la practica.
 

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador
Moderador de Tecnología
Error, poner en limpio el trabajo que se necesita realizar significa que sabes cuanto tiempo te va a llevar en horas hombre obtener el resultado buscado. No hace falta el analisis teorico para poder llevar el cambio a la practica.
Primero, lo que decís no tiene sentido, segundo: andá a decirle eso a la ACM.
Por último, ya que tengo una clase y no tengo el tiempo para contestar (de hecho, no sabía si contestarte, porque me da vergüenza ajena hacerlo);
hacerte el que sabés no lo va a hacer realidad.

Saludos.
 

Feer~

Oráculo Lvl 2
La diferencia de hacerlo bien es abismal. Tomando un ejemplo de 10.000 serializaciones por tipo (Mi implementacion) vs (clsByteQueue)

Tremenda la diferencia.
Gracias a todos por los comentarios y gracias @Dr. Wolftein por tomarte el tiempo de describir las diferencias entre cada uno y por recomendar siempre distintas formas de mejorar la optimización del servidor.
Voy a tratar de hacer el pasaje de los paquetes que mencioné y, si veo que me doy maña, voy a tratar de pasar todo el protocolo entero.
Sí logro hacerlo y puedo llegar a hacer unas pruebas de la mejora tanto parcial como total, dejo la info acá por si alguna otra persona está en la misma que yo.

Saludos.
 
Última edición:

Dr. GoDKeR

El Rey y el As
Miembro del equipo
Administrador
Developer
Moderador de RRPP
Moderador de AO
Moderador de Tecnología
Moderador de Entretenimiento
Moderador de Diseño
Especialista de RRPP
Especialista de Entretenimiento
Especialista de Tecnología
Especialista de Argentum
Especialista de Diseño
No puedo agregar nada útil después de lo que escribió el boludo con la foto de karletos menem.

Pero, si te queres limar y debugear por horas, hacete un programita aparte que te lea el protocol.bas, te parsee los cases de los paquetes y te genere el un archivo .bas nuevo armándolo en binario. Ahí migrás todo con un click (y varias horas de debug por atrás hasta que no se rompa).

El famoso protocolo binario que se ve en el AO no es mas que un ENUM
En ves de que el codigo tenga que enviar y verificar que comando es por un string verifica por el valor que tiene en el ENUM y listo.


En cuestion de un par de dias podes pasar el juego entero haciendo todo el test correspondiente, sin testear nada en horas lo tenes hecho...
Na, dejalo ahí
 
Arriba