¿Cómo construir un juego simple de 2 jugadores, comunicarse a través de Internet, sin código personalizado en ningún servidor?

StackOverflow https://stackoverflow.com/questions/2144287

  •  23-09-2019
  •  | 
  •  

Pregunta

¿Cómo puedo construir un juego simple de 2 jugadores, que se comunica a través de Internet?

Necesito resolver los problemas de:

  • Busca o encuentro: dos jugadores quieren encontrarse.

  • Comunicaciones en curso. Cualquiera de los jugadores puede iniciar una acción que requiere entregar información al otro lado, en un plazo razonablemente rápido (latencia de tipo IM, no latencia de tipo correo electrónico).

En este sentido, supongo que es equivalente a una conversación de 2 vías, donde las personas quieren poder encontrarse, y luego, una vez emparejadas, intercomunicadas.

Requisitos adicionales:

  1. Por ahora, suponga que los puntos finales son Windows OS, relativamente recientes.

  2. Suponga que ninguna máquina de punto final es directamente accesible desde Internet. Suponga que son máquinas cliente, ocultas detrás de los firewalls que bloquean las solicitudes entrantes. Las máquinas pueden hacer solicitudes de salida. (Digamos, sobre http, pero TCP también está bien)

  3. La comunicación debe ser privada. Por simplicidad, digamos que ya hay un secreto compartido en su lugar, y los puntos finales pueden hacer AES. Supongo que lo que quiero decir con esto es que cualquier intermediario no debería necesitar descifrar los paquetes de mensajes. El descifrado ocurrirá solo en los puntos finales.

  4. Todo el código personalizado debe ejecutarse solo en las PC del cliente.

  5. Suponga que no hay un servidor en Internet que esté bajo mi control.

  6. Me complace usar servidores de terceros para facilitar la intercomunicación, como un servidor IM o algo así, siempre que sea gratuito, y no estoy obligado a instalar código personalizado en él.


¿Qué API están disponibles para facilitar este diseño?

¿Puedo hacer esto con IM API? WCF? ¿Hay canales WCF para Windows Messenger?

¿Qué protocolos? Http? Tengo esto etiquetado como "par de igual", pero quiero decir que virtualmente; No hay requisitos difíciles para un protocolo P2P formal.

¿Qué formatos de mensaje usarías?


EDITAR

Para aclarar los requisitos alrededor de los servidores, lo que quiero no es un servidor bajo mi control. Y ninguno de mi código personalizado en ningún servidor. Eso no es lo mismo que "sin servidor".

Piénselo de esta manera: puedo enviar un correo electrónico a través de SMTP, utilizando el código personalizado que escribo en el lado de envío y recepción. Mi código personalizado puede conectarse a través de un intermediario de servidor SMTP gratuito. Esto no requeriría una instalación de código en el servidor SMTP. Esto es algo así como lo que quiero, pero SMTP no es aceptable, debido a la latencia.

Edición2
También encontré esto: Biblioteca para mensajes instantáneos, como Libpurple, pero escrita en C#


RESPONDER

Puedo hacer lo que quiera, usando bibliotecas para marcos IM. Una forma simple de hacerlo usando Windows Live Messenger es usar el Actividad de Messenger SDK. Esto prueba el concepto, pero no es realmente una solución general. Pero, se pueden lograr cosas similares con las bibliotecas IM para varios sistemas de mensajeros, como Libpurple o el uso de LIB para canales IRC. En todos estos casos, los servidores IM actúan como la infraestructura de comunicaciones de penetración de firewall.

¿Fue útil?

Solución

libpurple junto con otr Puede darle la privacidad sobre IM de este tipo que necesitaría.

Otros consejos

¿Está bien usar los mismos datos en la búsqueda de la cuadrícula que usaré durante la clasificación real?

Está bien usar estos datos para capacitar (ajustar) a un clasificador. La validación cruzada, como se realiza por StratifiedKFold, está diseñada para situaciones en las que no tiene datos suficientes para mantener un conjunto de validación mientras optimiza los hiperparaméteres (la configuración del algoritmo). También puede usarlo si es demasiado perezoso para hacer un divisor establecido de validación y desea confiar en la validación cruzada incorporada de Scikit-Learn :)

La opción refit en GridSearchCV volverá a realizar el estimador en el conjunto de capacitación completa después de encontrar la configuración óptima con la validación cruzada.

Es, sin embargo, sin sentido a aplicar un clasificador capacitado a los datos que registra o entrenó en la red, ya que ya tiene las etiquetas. Si desea realizar una evaluación formal de un clasificador, debe sostener un conjunto de pruebas desde el principio y no toque nuevamente hasta que nuevamente hasta que haya realizado toda su red búsqueda, validación y ajuste.

Cada juego de dos jugadores debe tener algún tipo de entorno de servidor por la necesidad básica de tener que comunicarse entre dos clientes/jugadores al menos. Tenga en cuenta que cada uno de los clientes/jugadores también puede actuar como su propio servidor para comunicarse con otros clientes vinculados. Pero la necesidad de controlar a todos los clientes/jugadores en un momento dado y la necesidad de facilitar la búsqueda de otros clientes/jugadores inherentemente requiere algún tipo de entorno de servidor para empezar.

Puede configurar un tablero de mensajes en uno de los servidores gratuitos del tablero de mensajes para que los jugadores puedan encontrarse. Probablemente querrá alentarlos a usar mensajes privados para intercambiar direcciones IP. Luego, use un protocolo que se conecta con direcciones IP. Buena suerte con eso. Los firewalls lo hacen un dolor.

Luego, por supuesto, una máquina de la pareja necesitaría actuar como servidor, la otra como cliente. Su software debe contener ambos conjuntos de código. He escrito un juego así y puedo decirte que el código de comunicación se vuelve un poco confuso.

Puedo decirle ahora que sería mucho más feliz en la vida si escribiera un servicio web para facilitar la comunicación. Pero, entonces, necesitaría un servidor para eso.

Buena suerte. Lo vas a necesitar.

O bien, simplemente podría escribir un juego para un cliente IM, como Microsoft Messenger. He visto juegos para eso, así que sé que se puede hacer.

Como alguien ha dicho, es posible que aún no sea posible hacerlo si no tiene ningún servidor mediado entre 2 jugadores. Como está feliz de usar un servidor de terceros, le sugiero que construya su sistema usando Motor de aplicaciones de Google + XMPP sobre http. Funciona bien a través de Internet y detrás del firewall. Y, sin embargo, es gratis (siempre que su sistema no crezca en la cuota de GAE).

Peer to Hear está fuera debido a su restricción de firewall. Esto realmente no funciona fácilmente para los servicios de directorio de todos modos.

El próximo método más fácil que usaría es arrojar un script de servidor CGI muy simple en uno de los numerosos sitios de alojamiento web súper baratos. Parece que no quieres seguir esta ruta. ¿Hay alguna razón particular? 100 líneas de código y un servidor súper barato deberían darle todo lo que está pidiendo y más.

Supongo que podrías conectarte a algún tipo de biblioteca de chat de terceros. No sé sobre los protocolos IM actuales, pero el buen IRC y un canal separado para su juego funcionaría. Incluso podrías imponer algo juntos usando FTP. Los comentarios del blog en un sitio de blog gratuito también funcionarían. La pregunta es ¿por qué?

Todos estos son Kludges. Hacen el trabajo en formas obtusas, poco elegantes y mal escaladas.

Le insto a reconsiderar la solución del servidor web.

Tienes muchos requisitos conflictivos. Ambos clientes detrás de un firewall que bloquean las solicitudes entrantes más su significado significa que no pueden hacer un peer-2-peer, ya que ninguna máquina puede actuar como servidor, y necesitará tener un servidor de transporte en el medio en algún lugar en algún lugar de los mensajes de enrutamiento a cada cliente. En este momento, lo que está preguntando es prácticamente posible dado el requisito de no servidor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top