<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=SIMON</id>
	<title>SIMON - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=SIMON"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=SIMON&amp;action=history"/>
	<updated>2026-05-24T18:26:25Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=SIMON&amp;diff=2285496&amp;oldid=prev</id>
		<title>imported&gt;SchlurcherBot: Bot: http → https</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=SIMON&amp;diff=2285496&amp;oldid=prev"/>
		<updated>2025-11-18T13:41:29Z</updated>

		<summary type="html">&lt;p&gt;Bot: http → https&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Begriffsklärungshinweis|Zu weiteren Bedeutungen siehe [[Simon]].}}&lt;br /&gt;
{{Infobox Software&lt;br /&gt;
| Name = SIMON&lt;br /&gt;
| Logo = &lt;br /&gt;
| Screenshot = &lt;br /&gt;
| Beschreibung = &amp;lt;!-- Beschreibung des Screenshots! --&amp;gt;&lt;br /&gt;
| Maintainer = &lt;br /&gt;
| Hersteller = root1.de - Software Engineering&lt;br /&gt;
| Management = &lt;br /&gt;
| AktuelleVersion = 1.3.0&lt;br /&gt;
| AktuelleVersionFreigabeDatum = 8. März 2016&lt;br /&gt;
| AktuelleVorabVersion = 1.3.1-SNAPSHOT&lt;br /&gt;
| AktuelleVorabVersionFreigabeDatum = &lt;br /&gt;
| Betriebssystem = [[plattformunabhängig]]&lt;br /&gt;
| Programmiersprache = [[Java (Programmiersprache)|Java]]&lt;br /&gt;
| Kategorie = RPC-Kommunikationsframework&lt;br /&gt;
| Lizenz = [[GNU General Public License|GPL]] 3.0 / root1.de Library Commercial License 1.0&amp;lt;ref&amp;gt;{{internetquelle | autor=Alexander Christian | hrsg=root1.de Software Engineering | url=https://gitlab.com/dev.root1.de/simon/-/wikis/license/root1.de_LCL_v1.0 | sprache=Englisch | titel=root1.de Library Commercial License 1.0 | datum=2012-01-17 | zugriff=2012-02-06}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| Deutsch = &lt;br /&gt;
| Website = [https://gitlab.com/dev.root1.de/simon https://gitlab.com/dev.root1.de/simon]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SIMON&amp;#039;&amp;#039;&amp;#039; ist eine [[Mehrfachlizenzierung|dual lizenzierte]] [[Java (Programmiersprache)|Java]] [[Programmierschnittstelle|API]], die einen alternativen Ansatz zur Durchführung eines [[Remote Procedure Call]] (RPC) verfolgt und deshalb als Alternative zu [[Remote Method Invocation]] (RMI) bezeichnet wird. Im Vergleich zur RMI-Implementierung ist SIMON deutlich einfacher in der Verwendung und kommt besser mit netzwerkübergreifenden Verbindungen zurechtkommt wie zum Beispiel mit Firewalls.&lt;br /&gt;
&lt;br /&gt;
SIMON ist ein [[Akronym]] für &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039;imple &amp;#039;&amp;#039;&amp;#039;I&amp;#039;&amp;#039;&amp;#039;nvocation of &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039;ethods &amp;#039;&amp;#039;&amp;#039;O&amp;#039;&amp;#039;&amp;#039;ver &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;etwork.&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
SIMON verfolgt prinzipiell die gleichen Ziele und Ansätze wie RMI: Die Kommunikation erfolgt im objektorientierten RPC-Stil über eine [[Transmission Control Protocol/Internet Protocol|TCP/IP]]-Verbindung. Nach wenigen einleitenden API-Aufrufen ist die Verbindung hergestellt und die weitere Entwicklung kann völlig unabhängig von der verwendeten Netzwerktechnologie verlaufen.&lt;br /&gt;
&lt;br /&gt;
Bei der Entwicklung von SIMON wurde jedoch besonderes Augenmerk auf folgende Funktionen gelegt:&lt;br /&gt;
&lt;br /&gt;
* Skalierbarkeit&amp;lt;br /&amp;gt;Statt wie RMI auf Java IO (blocking IO) zu setzen, verwendet SIMON das [[Apache MINA|Apache-MINA-Framework]], das primär auf Java [[New I/O|NIO]] (non blocking IO) setzt. Der Vorteil liegt darin, dass man nicht mehr einen [[Thread (Informatik)|Thread]] pro verbundenem Client benötigt, sondern mit einer fixen Anzahl Threads arbeiten kann, was bei sehr vielen Clients Ressourcen spart.&lt;br /&gt;
* Bidirektionale Methodenaufrufe über Netzwerke hinweg&amp;lt;br /&amp;gt;Hat ein Client eine Verbindung zu einem SIMON Server aufgebaut, so kann der Server denselben, bereits offenen Kommunikationskanal nutzen, um Methoden auf Clientseite aufzurufen.&lt;br /&gt;
&lt;br /&gt;
== Funktionen ==&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Version bietet unter anderem folgende Funktionen:&amp;lt;ref&amp;gt;{{internetquelle | autor=Alexander Christian | hrsg=root1.de Software Engineering | url=https://gitlab.com/dev.root1.de/simon/-/wikis/home | sprache=Englisch | titel=Features | datum=2011-04-28 | zugriff=2021-02-05}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Bidirektionales RPC&amp;lt;br /&amp;gt;Client kann Methoden auf dem Server aufrufen und Server kann Methoden auf dem Client aufrufen (Callback)&lt;br /&gt;
* Proxy support&amp;lt;br /&amp;gt;Ein Client kann sich über einen Proxy-Server mit dem Server verbinden&lt;br /&gt;
* SSL Unterstützung&amp;lt;br /&amp;gt;Verschlüsselung der gesamten Kommunikation mittels SSL&lt;br /&gt;
* Austauschbares Protokoll&amp;lt;br /&amp;gt;Entwickler können ihr eigenes Protokoll schreiben&lt;br /&gt;
* Connection loss detection&amp;lt;br /&amp;gt;Erkennt Verbindungsabbrüche in kürzester Zeit (Prüfintervall konfigurierbar)&lt;br /&gt;
* Statistiken&amp;lt;br /&amp;gt;Zugriff auf Verbindungsstatistiken via API&lt;br /&gt;
* RawDataChannel&amp;lt;br /&amp;gt;Transfer von Rohdaten vom Client zum Server und umgekehrt ohne zusätzlichen Reflection- oder Serialisierungsoverhead.&lt;br /&gt;
* PublishService&amp;lt;br /&amp;gt;Findet SIMON Server im lokalen Netzwerk automatisch&lt;br /&gt;
&lt;br /&gt;
== Unterschiede zu RMI ==&lt;br /&gt;
&lt;br /&gt;
SIMON orientiert sich zwar am Vorbild RMI, jedoch gibt es deutliche Unterschiede:&amp;lt;ref&amp;gt;{{internetquelle | autor=Alexander Christian | hrsg=root1.de Software Engineering | url=https://gitlab.com/dev.root1.de/simon/-/wikis/home | sprache=Englisch | titel=Comparison to RMI | datum=2011-04-28 | zugriff=2021-02-05}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SIMON verwendet ein eigenes, angepasstes Protokoll, sowie ein RMI-inkompatibles API. RMI Anwendungen lassen sich jedoch recht einfach zu SIMON portieren. Es muss lediglich das [[Remote Method Invocation#Komponenten|Remote-Interface]] sowie der Verbindungsaufbau angepasst werden.&lt;br /&gt;
* SIMON verwendet über das Apache MINA Framework Java NIO statt wie RMI Java IO.&lt;br /&gt;
* Bei RMI hat man nur indirekt Kontrolle über die Anzahl der Netzwerkverbindungen für die RPC Kommunikation zwischen Client und Server. Bei SIMON gibt es exakt eine Netzwerkverbindung, welche vom Client aus in Richtung Server aufgebaut wird, und für Kommunikation in beide Richtungen verwendet werden kann.&lt;br /&gt;
* SIMON verwendet ein konfigurierbares Thread-Modell für die Abwicklung der Kommunikation und Methodenaufrufe. Entweder man überlässt der JVM die Entscheidung über die Anzahl der Threads, oder man legt eine fixe Anzahl Threads fest. Bei RMI hat man keinen direkten Einfluss.&lt;br /&gt;
* RMI benötigt eine weitere Socket-Verbindung für Callbacks vom Server zurück zum Client. Befindet sich der Client hinter einem [[Router]], wie er beispielsweise bei DSL-Anschlüssen die Regel ist, schlägt dieser Verbindungsaufbau ohne zuvor eingerichtete, manuelle [[Portweiterleitung]] im Router fehl. SIMON verwendet für Callbacks die bereits existierende Netzwerkverbindung die der Client aufgebaut hat. Es ist keine konfiguration des Netzwerks bzw. des Routers notwendig.&lt;br /&gt;
* SIMON beherrscht die Verwendung von Proxys, was die Kommunikation beispielsweise aus Firmennetzwerken, wo Proxys üblich sind, erleichtert. RMI hingegen beherrscht nur das HTTP-Tunneling über den Umweg eines CGI-Scripts. Damit geht jedoch ein Großteil der Performance verloren.&lt;br /&gt;
&lt;br /&gt;
== Einsatzbereiche ==&lt;br /&gt;
SIMON lässt sich dank seiner Architektur und Vorteilen gegenüber dem klassischen RMI vielseitig einsetzen. So findet SIMON unter anderem Verwendung in der Ausbildung, Forschung und Spieleentwicklung&amp;lt;ref&amp;gt;{{internetquelle | autor=André König, Carina Strempel, Christian Bollmann | hrsg=Hochschule Bremen - Fachbereich Medieninformatik | url= http://code.google.com/p/minerva-game/ | titel=minerva-game, Das Spiel »Risiko« | datum=2012-03-30 | zugriff=2012-03-30}}&amp;lt;/ref&amp;gt;, im [[Grid-Computing]]&amp;lt;ref&amp;gt;{{internetquelle | autor=Hermann Heßling | hrsg=Hochschule für Technik und Wirtschaft Berlin / University of Hamburg | url=https://www.desy.de/dvsem/WS1011/hessling_talk.pdf | sprache=Englisch | titel=Real-time Grid Computing: Recent Results on a Pilot Job Approach | datum=2011-02-07 | zugriff=2012-03-30 | format=PDF; 7,2&amp;amp;nbsp;MB}}&amp;lt;/ref&amp;gt; sowie bei diversen Wirtschaftsunternehmen&amp;lt;ref&amp;gt;{{internetquelle | autor=Alexander Christian | hrsg=root1.de Software Engineering | url=https://gitlab.com/dev.root1.de/simon/-/wikis/home | sprache=Englisch | titel=Who uses SIMON?| datum=2012-03-30 | zugriff=2021-02-05}}&amp;lt;/ref&amp;gt; wo es für die klassische Trennung von [[Front-End und Back-End]] eingesetzt wird.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
Im Dezember 2007 begann Alexander Christian, angetrieben durch die Nachteile, die RMI bei der Verbindung über das Internet mit all seinen Hürden wie Router, Gateways, Firewalls etc. hat, eine alternative RMI Lösung zu implementieren.&lt;br /&gt;
&lt;br /&gt;
Bedingt durch den etwas erweiterten Funktionsumfang gegenüber RMI und Auslegung der Netzwerkkommunikation, war es nicht möglich das Protokoll und die Programmierschnittstelle kompatibel zum RMI zu halten.&lt;br /&gt;
&lt;br /&gt;
Die erste Version &amp;#039;&amp;#039;0.1 alpha&amp;#039;&amp;#039; wurde am 18. Januar 2008 in einer deutschsprachigen Java-Entwickler-Community veröffentlicht.&amp;lt;ref&amp;gt;{{internetquelle | autor=Alexander Christian | hrsg=java-forum.org | url=http://www.java-forum.org/netzwerkprogrammierung/59091-rmi-vs-simon.html#post366144 | titel=RMI vs. SIMON | datum=2008-01-18 | zugriff=2021-02-05}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mitte 2008 begann die Umstellung von &amp;#039;&amp;#039;blocking-IO&amp;#039;&amp;#039; zu &amp;#039;&amp;#039;non-blocking-IO&amp;#039;&amp;#039; mit Hilfe der Java-Programmierschnittstellen für NIO, was am 15. Oktober 2008 zu Version &amp;#039;&amp;#039;0.2&amp;#039;&amp;#039; führte.&lt;br /&gt;
Da die [[Implementierung]] der Netzwerkschicht in SIMON jedoch noch nicht optimal war, begann kurz darauf die Umstellung der Netzwerkschicht auf Apache MINA, was eine nochmal bessere Performance versprach.&lt;br /&gt;
&lt;br /&gt;
Bereits im Oktober 2008 gab es eine erste „MINA powered“ Version &amp;#039;&amp;#039;0.3 alpha&amp;#039;&amp;#039; von SIMON. Bis zur stabilen Version 1.0.0 sollte es jedoch noch bis 1. Februar 2010 dauern. In der Zwischenzeit wurde das Build-System von [[Apache Ant]] auf [[Apache Maven]] umgestellt, was auch die Änderung des Versionsschema von einer zweistelligen, auf eine dreistellige Version umfasste.&amp;lt;ref&amp;gt;{{internetquelle | autor=Alexander Christian | hrsg=root1.de Software Engineering | url=https://gitlab.com/dev.root1.de/simon/-/wikis/home | sprache=Englisch | titel=History | datum=2011-04-28 | zugriff=2021-02-05}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Am 19. April 2012 teilte die [[IANA]] den [[Transmission Control Protocol|TCP]]-Port 4753 dem Dienst &amp;#039;&amp;#039;simon&amp;#039;&amp;#039; zu, sowie den [[User Datagram Protocol|UDP]]-Port derselben Nummer dem Dienst &amp;#039;&amp;#039;simon-disc&amp;#039;&amp;#039; (SIMON Discovery).&amp;lt;ref&amp;gt;{{internetquelle |hrsg=IANA | url=http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml | sprache=Englisch | titel=Service Name and Transport Protocol Port Number Registry | datum=2012-04-19 | zugriff=2012-04-20 | format=XML, 3,2 MB }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[Remote Method Invocation]]&lt;br /&gt;
* [[Jini]]&lt;br /&gt;
* [[Java Naming and Directory Interface]] (JNDI)&lt;br /&gt;
* [[Cajo]] (Vereinfachung des Gebrauchs von RMI)&lt;br /&gt;
* [[Common Object Request Broker Architecture]] (CORBA)&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.patrick-gotthard.de/rmi-alternative-simon RMI-Alternative SIMON]&lt;br /&gt;
* [http://www.sbgl.de/rmi/ Funktionsweise und Ziele von RMI]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Java-Programmierschnittstelle]]&lt;br /&gt;
[[Kategorie:Middleware]]&lt;/div&gt;</summary>
		<author><name>imported&gt;SchlurcherBot</name></author>
	</entry>
</feed>