Zkus se mrknout na ICE -
http://www.zeroc.com/The Internet Communications Engine (Ice) is a modern distributed computing platform with support for C++, .NET, Java, Python, Objective-C, Ruby, PHP, and ActionScript. Ice is used in mission-critical projects by companies all over the world.
dá se to použít i pro vytvoření multiplatformní komunikace mezi aplikacemi pokud potřebuješ RPC (remote procedure call) a není to až tak složité, viz. demo:
http://www.zeroc.com/programmingModel.html1. uděláš definici rozhraní ve Slice (trochu jako UML v COM):
// File example.ice
module Example
{
interface Converter
{
string toUpper(string s);
};
};
2. proženeš softíkem, třeba slice2cs, vypadnou ti zdrojáky a nějaký bordel okolo - slice2cs example.slice
3. napíšeš kód klienta
using Example;
public class Client
{
public static void Main(string[] args)
{
try
{
Ice.Communicator communicator = Ice.Util.initialize();
ConverterPrx cvt = ConverterPrxHelper.checkedCast(
communicator.stringToProxy("converter:tcp -p 10000 -h host.domain.com"));
string upper = cvt.toUpper("hello world");
System.Console.WriteLine("Server returned: " + upper);
communicator.destroy();
}
catch(System.Exception ex)
{
System.Console.Error.WriteLine(ex);
System.Environment.Exit(1);
}
}
}
a zkompiluješ csc /r:Ice.dll /lib:c:\Ice-3.3.1\bin client.cs example.cs
4. napíšeš kód serveru
public class ConverterI : Example.ConverterDisp_
{
public override string toUpper(string s, Ice.Current c)
{
return s.ToUpper();
}
}
public class Server
{
public static void Main(string[] args)
{
try
{
Ice.Communicator communicator = Ice.Util.initialize();
Ice.ObjectAdapter adapter = communicator.createObjectAdapterWithEndpoints(
"converter", "tcp -p 10000");
adapter.add(new ConverterI(), communicator.stringToIdentity("converter"));
adapter.activate();
communicator.waitForShutdown();
communicator.destroy();
}
catch(System.Exception ex)
{
System.Console.Error.WriteLine(ex);
System.Environment.Exit(1);
}
}
}
a zkompiluješ csc /r:Ice.dll /lib:c:\Ice-3.3.1\bin server.cs example.cs
5. spustíš server a pak client, server vrátí HELLO WORLD
Výhodou by mělo být že je podporováno docela dost jazyků a je to multiplatformní, mě osobně to zaujalo jako možné řešení jak napsat multiplatformně pluginy třeba v pythonu využívající RPC. Takže si uděláš aby aplikace která čte data byla z hlediska ICE "server" a to php bylo "klient", tedy role se prohodí.