tcp communication remote-execution secondlife linden-scripting-language

tcp - Comunicaciones LSL



communication remote-execution (5)

Hace años, creé un programa de colaboración en Diversity University MOO, una sala escrita en MOOcode que usaba TCP / IP para comunicarme con un servidor perl en mi campus para compilar y ejecutar C, Perl, Bash y otros programas y devolver los resultados al Colaboración de MOO: todo para demostrar los lenguajes de programación en un entorno de enseñanza de MOO. La aplicación suele ser entretenida en cinco o seis idiomas y divertida de jugar. Ahora me gustaría hacer lo mismo en SecondLife usando LSL. La única sugerencia que he recibido hasta ahora de esa multitud es usar una solicitud de WWW, presumiblemente construyendo un mensaje POST http para un proceso CGI. Nunca me interesaron mucho los formularios html, así que prefiero usar TCP / IP o algún otro protocolo de comunicación. ¿Alguien ha intentado esto que le gustaría dar algunas pistas? Hay varios sitios de demostración de LSL en SecondLife, pero me gustaría probar otros lenguajes de compilación y script, incluso PowerShell. Dick S.


REST ahora está de moda para los servicios web. No hay una razón real para pasar a la capa TCP / IP por algo que, según su descripción, no requiere un rendimiento superior o tiempos de respuesta. La compatibilidad con LSL HTTP es bastante buena, así que no deberías tener ningún problema.

Por supuesto, no es ideal recuperar la salida de tus programas en tiempo real, para eso necesitarías abrir la conexión http en el servidor y escribir constantemente en el cuerpo de la página (mientras el cliente lo leería). Pero incluso con ir y venir entre el servidor y el cliente, debería obtener una experiencia moderadamente buena.


Las opciones de comunicación externa de LSL están limitadas a tres opciones específicas. La wiki oficial de LSL proporciona información más detallada sobre cada opción.

  • HTTP sin formato: las solicitudes deben iniciarse mediante el script LSL
  • XmlHTTP: las solicitudes deben iniciarse por un servicio externo
  • Correo electrónico: comunicación bidireccional completa, pero con temporizadores de sueño forzados.

Yo tendería a estar de acuerdo con Ilya.

Lo mejor que puede obtener si desea que la secuencia de comandos sea muy receptiva es hacer que su código del servidor vuelva a llamar al objeto una vez que el servidor haya tenido conocimiento de ello utilizando XML-RPC.

La wiki principal de Second Life es bastante buena para código de ejemplo, etc. XML-RPC


La función llHTTPRequest de LSL y el evento http_response correspondiente son definitivamente su mejor opción.

Contrariamente a la suposición planteada en su pregunta, el uso de http no requiere el uso de "formularios html". La carga útil POST (o PUT) puede contener datos organizados de la forma que desee. Una interfaz REST es una buena forma de hacer el tipo de comunicación http de máquina a máquina de la que estamos hablando. Una ventaja de REST sobre html o xml es que REST puede ser mucho menos detallado. Esto es importante cuando comienzas a acercarte al límite de 2048 caracteres de LSL en las respuestas http.

Aunque LSL tiene otros dos métodos de comunicación con el resto de Internet (correo electrónico y xml-rpc), su uso en scripts LSL está muy desaconsejado en estos días. Ambos sistemas (como se implementa actualmente en Second Life) se basan en servidores centralizados para enrutar mensajes a sus destinos. Esto no se escala bien. Estos servidores están bajo una carga cada vez mayor a medida que Second Life crece. llHTTPRequest, por otro lado, se ejecuta completamente en el simulador que ejecuta su secuencia de comandos, lo que significa que no tiene que preocuparse por los mensajes perdidos debido a los servidores centrales sobrecargados.

Finalmente, pronto se agregará una nueva función a LSL que permitirá que cualquier script actúe como un servidor http (ver http://wiki.secondlife.com/wiki/LSL_http_server ). Actualmente se implementó (a partir de junio de 2009) en la red beta, pero debería estar en la red principal con la próxima actualización importante. Con esta adición, muchos de los programas LSL a web actuales que sondean regularmente un servidor web para obtener datos actualizados podrán, en cambio, recibir actualizaciones cuando ocurran.


Como dijo Ilya, REST y LSL-HTTP serían el camino a seguir.

La nueva implementación de JSON dentro de Linden Scripting Language debería ayudar con eso. Es posible que desee comenzar leyendo el uso de Json en la página LSL en la wiki oficial.