5

Vor Jahren habe ich eine Programmierkooperation in Diversity University MOO erstellt - ein Raum in MOOcode geschrieben, der TCP/IP verwendet, um mit einem Perl-Server auf meinem Campus zu kommunizieren und C, Perl, Bash und andere Programme zu kompilieren und auszuführen und die Ergebnisse an die MOO Collaboratory zurückgeben - alles um Programmiersprachen in einer MOO-Lernumgebung zu demonstrieren. Die Anwendung ist in der Regel ein Spaß in fünf oder sechs Sprachen und Spaß zu spielen. Jetzt möchte ich das gleiche in SecondLife mit LSL machen. Der einzige Vorschlag, den ich bisher von dieser Menge erhalten habe, ist die Verwendung einer WWW-Anfrage, die vermutlich eine HTTP POST-Nachricht für einen CGI-Prozess erstellt. Ich habe mich nie sehr für HTML-Formulare interessiert, also würde ich lieber TCP/IP oder ein anderes Kommunikationsprotokoll verwenden. Hat jemand das versucht, der einige Hinweise geben möchte? Es gibt einige gute LSL-Demoseiten in SecondLife, aber ich möchte andere Compiler- und Skriptsprachen, vielleicht sogar PowerShell, vorführen. Dick S.LSL Kommunikation

Antwort

5

REST ist jetzt in Mode für Web-Services. Es gibt keinen wirklichen Grund, auf TCP/IP-Ebene für etwas zuzugreifen, das aus Ihrer Beschreibung keine Super-Leistung oder Reaktionszeiten erfordert. LSL HTTP-Unterstützung ist ziemlich gut, so sollten Sie keine Probleme haben.

Natürlich ist es nicht ideal, um die Ausgabe Ihrer Programme in Echtzeit zurück zu bekommen - dafür müssten Sie http-Verbindung auf dem Server öffnen und ständig auf den Körper der Seite schreiben (während der Client lesen würde Das). Aber selbst wenn Sie zwischen dem Server und dem Client hin und her gehen, sollten Sie mäßig gute Erfahrungen machen.

4

Die externen Kommunikationsoptionen von LSL sind auf drei spezifische Optionen beschränkt. Das offizielle LSL-Wiki bietet detailliertere Informationen zu jeder Option.

  • Raw HTTP: Anfragen müssen von LSL-Skript
  • XMLHttp eingeleitet werden: Anträge sind von externen Dienstleistern
  • E-Mail ausgelöst werden: volle Zwei-Wege-Kommunikation, sondern mit erzwungenen Sleep-Timer .
2

Ich würde eher mit Ilya übereinstimmen.

Das Beste, was Sie möglicherweise ziehen können, wenn das Skript sehr reaktionsschnell sein soll, besteht darin, dass Ihr serverseitiger Code zurück zum Objekt ruft, sobald der Server über den XML-RPC darauf aufmerksam gemacht wird.

Das Haupt Wiki für Second Life ist ziemlich gut für Beispielcode usw. XML-RPC

2

LSL die llHTTPRequest Funktion und entsprechende http_response Veranstaltung sind auf jeden Fall die beste Wahl.

Entgegen der Annahme in Ihrer Frage, die Verwendung von http erfordert nicht die Verwendung von "HTML-Formularen". Die POST- (oder PUT-) Nutzlast kann beliebig organisierte Daten enthalten. Eine REST-Schnittstelle ist ein guter Weg, um die Art von Machine-to-Machine-HTTP-Kommunikation zu erreichen, von der wir sprechen. Ein Vorteil von REST gegenüber HTML oder XML ist, dass REST viel weniger ausführlich sein kann. Dies ist wichtig, wenn Sie sich der LSL-Grenze von 2048 Zeichen für HTTP-Antworten nähern.

Obwohl LSL hat zwei andere Methoden der Kommunikation mit dem Rest des Internets (E-Mail und XML-RPC), ihre Verwendung in LSL-Skripte ist hoch entmutigt in diesen Tagen. Beide Systeme (wie derzeit in Second Life implementiert) sind auf zentralisierten Servern angewiesen, um Nachrichten an ihre Ziele zu leiten. Dies ist nicht gut skalierbar. Diese Server werden immer stärker beansprucht, wenn Second Life wächst.llHTTPRequest läuft dagegen vollständig auf dem Simulator, auf dem das Skript ausgeführt wird. Sie müssen sich also keine Gedanken über fehlende Nachrichten wegen überlasteter zentraler Server machen.

Schließlich wird es bald eine neue Funktion in LSL geben, die es jedem Skript ermöglicht, als http-Server zu agieren (siehe http://wiki.secondlife.com/wiki/LSL_http_server). Es wird derzeit (Stand Juni 2009) im Beta-Grid bereitgestellt, sollte aber mit dem nächsten großen Update im Hauptnetz sein. Mit diesem Zusatz werden viele der aktuellen LSL-to-Web-Programme, die regelmäßig einen Webserver nach aktualisierten Daten abfragen, stattdessen in der Lage sein, Aktualisierungen an sie zu senden, wenn sie auftreten.

0

Wie Ilya sagte, REST und LSL-HTTP wäre der Weg zu gehen. Die neue Implementierung von JSON innerhalb der Linden Scripting Language sollte dabei helfen. Vielleicht möchten Sie mit dem Lesen der Json usage in LSL Seite im offiziellen Wiki beginnen.