Need a recommendation on the organization of interprocess communication:

  • Something that does not depend on the operating system, well, or that there are working implementations at least under a PC (win \ unix)
  • If possible - to be able to connect with another language - pluses or python for example
  • The ability to drive information at least as an array of bytes, although it would be better with a certain structure

Actually - I want the name of the technology that is closest to the specified capabilities and a minimal example of work, you can refer to some repository.

  • one
  • 2
    Well, for example, WCF. - Qwertiy
  • Try sockets - Anton Shchyrov
  • Cap'n Proto. Everything, the question can be closed as “generating endless debates and discussions based not on knowledge, but on opinions”. - ߊߚߤߘ
  • one
    @Monk, java exactly can. In general, it depends on the method of serialization. - Qwertiy

2 answers 2

In references I bring binding / ports of these libraries on C #.

  • Named pipes или Sockets - can any of this passively wait for a connection? Well, or actively, the main thing is to be able to knock outside. - Monk
  • Of course, NamedPipeServerStream has a method WaitForConnectionAsync , and Socket ReceiveAsync . - Raider
  • @Monk, Is named crossplatform pipes? - Qwertiy
  • @Qwertiy Named pipes exist in both .NET Core and Mono, and indeed in * nix systems. - Raider

Check out .Net Core, AppDomain, WCF, RPC Marshaling TCP / Ip your bike

The solution itself is very close with the COM out process interaction on IDispatch. I remember with pleasure dealt with TSocketConnection internals.

But, unlike Idispatch, overloading of methods and operators is used, calling Generic methods with type inference or specifying Generic arguments. Support for extension methods for classes that are in the same assembly and for Linq methods.

Also support for asynchronous methods and subscription to events, ref and out parameters, access by index [], support for iterators in foreach.

Unlike Web Api, there is no need to specifically write the server code Controller, Hubs. This is close to the AppDomain c Remouting but, unlike Remoting, each class is analogous to MarshalByRefObject. That is, we can create any object on the server side and return a link to it (some languages ​​from numbers only support double). When calling methods, only the following types of parameters are directly serialized: numbers, strings, date, Guid and byte []. For other types, you need to create them on the server side, and references to them are already passed in the method parameters.