Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sockets UDP y juegos

Iniciado por jguerrero, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

jguerrero

                                Buenas, estaba pensando en hacer otro artículo sobre programación con Winsock, pero esta vez usando UDP y orientado al mundo de los juegos. Me preguntaba si resultaría interesante o si, por el contrario, puede ser un tema demasiado trillado.

¿Qué os parece? Admito sugerencias sobre la orientación y el contenido del artículo...

Gracias por anticipado!!
                               

Frodrig

                                Hola Javier,

Seria mas que interesante, sobre todo que abordaras tambien el aspecto referido a la arquitectura cliente - servidor desde el punto de vista teorico para un engine.

Yo tengo impreso el primero que hiciste y esta en las primeras posiciones de mi cola de articulos a leer. Lo que vi me parecio que tenia una buenisima pinta.

Yo, personalmente, estaria encantado de leerlo.

Un saludo.
                               

Emotion

                                estaria muy bien, que asi tal vez consiga entender de una vez por todas como funciona el winsock :sonriendo:

un saludo                                
G3: Get the Power!

jguerrero

                                Frodrig:

Gracias, ese primer artículo explicaba los fundamentos de los sockets, con lo cual es perfecto para empezar a usarlos. No obstante, aunque en el codigo fuente de ejemplo usaba un esquema Cliente-Servidor, estaba orientado a TCP y no estaba orientado hacia juegos, aunque la base está ahí y no debería ser difícil adaptarlo.

Emotion:

Para entender cómo funciona el Winsock ya puedes mi primer artículo, creo que puede servirte.
                               

jguerrero

                                Se me olvidaba Frodrig, es interesante lo que me dices de abordar el tema desde un punto de vista teórico para un engine.

La verdad es que en cuestión de programación de engines no soy ningún experto, de hecho tengo una idea básica de cómo funciona un engine pero lo cierto es que nunca me he currado uno, así que posíblemente necesitaria algo de orientación o ayuda...de ahí que admita sugerencias! :ojo:
                               

NeLo

                                Ya que estamos en temas de red para juegos, ¿es que nadie usa DirectPlay?
                               
Drowning deep in my sea of loathing

ethernet

                                Hola. Ya he leido el articulo de sockets anterior. Unas criticas y sugerencias;-)

- Por q usas formato word ? podrias usar un formato q pudisemos leer todos (pdf,html).

- La forma de trabajar con sockets en windows con winsock y en linux (etc) son muy similares (en lo basico), no hubiera estado mal explicar hasta donde se pudiera cual son las diferencias (q son muy muy pocas) y asi hacer un tutorial mas completo.

Lo del tutorial UDP me parece una idea cojonuda y como bien han dicho antes no estaria mal orientarlo a un motor de un juego.  puesto q UDP es mucho mas simplede usar q TCP y lo basico esta explicado.

Para un ejemplo de motor q use UDP se puede mira el codigo del quakeworld o el del quake2.

                               

Emotion

                                para Nelo:

si no mal recuerdo, lei por ahi que DirectPlay esta construido sobre Winsock, con lo que si quieres utilizar las estructuras de DirectPlay, supongo que esta bien, pero si necesitas exprimir las funciones de red o construir una interfaz de red solida supongo que tu unica alternativa fiable es ir a por el Winsock, aunque yo DirectPlay no lo he usado nunca, yo lo maximo que he llegado a usar ha sido Winsock, aunque a un nivel muy basico (vamos, el tipico ejemplito de las dos ventanas que se pasan texto y lo que tienes es una especie de CutreChat :sonriendo:)

un saludo                                
G3: Get the Power!

jguerrero

                                Ethernet:

- El artículo lo envié a Stratos en formato RTF (más estándar imposible y además ocupa poco espacio) pero ellos al parecer lo pasan a Word y lo maquetan a su manera. En mi páginilla lo tengo en RTF, yo también lo prefiero así.

- Es cierto que, tal y como está hecho el artículo, se podría haber explicado un poco las diferencias entre Win y Linux, puesto que las únicas funciones específicas de Windows que uso están relacionadas con los mensajes de ventana. No he hablado de Linux porque no lo conozco lo suficiente y no me gusta aventurarme a enumerar unas diferencias que no he comprobado; de todas formas sí que se puede hablar del tema y al menos referirse a esas diferencias de manera, por así decirlo, teórica. Vaya parrafada que he soltado....

- Ok, entonces veo que os parece interesante un artículo así. Empezaré a pensar en el tema, se aceptan más sugerencias...
                               

Frodrig

                                Hola otra vez,

Cuando hablaba de realizar una aproximacion teorica sobre una arquitectura cliente - servidor para un engine, mas que nada me referia a que se comentara, por encima, como deberia de organizarse el codigo de un motor de juegos que fuera multijugador. Esta claro que ciertos subsistemas tienen que estar en el servidor para que los clientes (un jugador, por ejemplo) pueda solicitar informacion acerca del universo de juego y recibir las notificaciones oportunas. De esta forma, estaria bien realizar una pequeña aproximacion de como deberia de funcionar un sistema de estas caracteristicas (esta claro que en tu tutorial vas a dejar esto claro de forma implicita; lo que yo te propongo es que lo dejes lo mas explicito posible).

Imaginate que creas un juego de tenis multijugador. No seria otra cosa que preguntarte como organizarias el codigo del "engine" que hiciera funcionar el juego de tenis. Luego el lector podra extrapolar la organizacion que tu propongas para sus propios proyectos.

No se, quizas te este liando mas que sugiriendo. De todas formas, reitero mi interes por ese articulo :sonriendo:.

Un saludo.                                

ethernet

                                - suspenso para stratos por el formato (discrimina a usuarios q no usan word)

- Cuando dije diferencias me referia a la hora de programar. Hay poquisimas diferencias puesto q los struct usados, funciolnes etc son identica. Lo unico q cambia son las headers y close/closesocket. Todo esto me refiero a nivel muy basico no a nivel de sockets asincronos o no blocantes. En cualquier caso despues de leerse el tutorial de stratos te puedes leer uno de sockets para linux/unix etc y te serira igual


Una pregunta sobre sockets ahora:
Es mas eficiente en windows con winsock socket  no bloqueantes y hacer un poll sobre ellos cada cierto tiempo o usar sockets asincronos.
Uso la primera formula (entre otras cosas para mantener la portablidad del codigo) y he pensado q puede ser mas eficiente la segunda. En la msdn dice q WSAAsynSelect pone en modo no blocante el socket y no se si windows hara el poll por su cuenta. Sabeis algo

Saludos

                               

jguerrero

                                Frodrig:

Entiendo lo que quieres decir, no te preocupes que no me estás liando. La verdad es que el tema es bastante complejo, ya que dependiendo del tipo de juego la cosa puede cambiar bastante.

Por ejemplo, se me ocurre que en el caso más simple, un servidor se limitaría a aceptar conexiones entrantes, llevar la cuenta de estas conexiones y gestionarlas: los clientes envían datos al servidor (por ejemplo, las nuevas coordenadas de un personaje al moverse) y el servidor las despacha a cada una de las estaciones restantes, para que éstas sepan que uno de los jugadores se ha movido.

Esto se me ocurre así sobre la marcha, y lo que quiero decir es que en un modelo más complejo se enviaría mucha más información, habría que tratar con problemas de lag, etc etc. En cualquier caso me pondré manos a la obra.

PD: La verdad es que se me ocurre hacer algo más ambicioso...¿alguien necesitaría añadirle capacidades multijugador a su juego? :ojo:
                               

jguerrero

                                Ethernet:

- A ver si Stratos toma nota del tema.

- Sí, entendí a lo que te referías. De todas formas, y como bien dices, después de leer el artículo, puedes mirar cualquiera sobre Linux y extraer tú mismo las diferencias, son pocas y no es difícil. Como digo en una parte del artículo, cualquier programador de nivel medio debería ser capaz de hacerlo.

- No estoy seguro pero creo que Windows hace por su cuenta el poll, de todas formas me parece que de lo que se trata es de adecuación, más que eficiencia: es decir, quizás en un juego no te puedas permitir estar cada cierto tiempo haciendo comprobaciones y sea mejor dejar que el sistema te avise asíncronamente.
                               

ethernet

                                Yo tenia un modelo de cliente servidor UDP para trabajar en sistemas con lag (como internet).
Mi idea es crear con UDP un sistema como TCP con conexion, replys y demas pero no  aun nivel muy complejo. De esa manera te olvidas de los problemas del lag y la sobrecarga de TCP.

Para el problema del lag esa implementacion podria tener un sistema en el q guardara los ultimos N paquetes para temas de prediccion y demas.

Para otro tipo de juegos en ls q la velocidad no sea muy importante yo creo q TCP es la solucion perfecta.

Saludos


                               

jguerrero

                                ¿Tenias? ¿Qué ha sido de él?

Estoy de acuerdo, TCP debería ser suficiente para juegos más "tranquilos"...
                               






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.