Comparisons with other libraries #5
Replies: 5 comments 4 replies
-
Thanks for the extensive list of libs which are comparable to PolyMessage. Not sure what to say about your conclusions though. You are free to choose whichever library you see fit and gRPC and libs under active development are always a better choice. Problem is I don't see a proper benchmark and your conclusion seems far-fetched based on a subjective observation using the loopback interface even. Look at |
Beta Was this translation helpful? Give feedback.
-
MagicOnion.mp4MagicOnion is also pretty fast, but unfortunately does not support named pipes. Yes, you're right, I have no experience in this side and the maximum I can do is observe the time to establish a connection, call a method and return. I should also see how it performs on heavy load, but since I now need quick short terms connections I didn't thought about it. Simplicity is also another factor I have to take into account. Unfortunately I don't have another machine where I can test, but thanks. I wanted to try again PM and compiled the IPC variant to see how it performs. Unfortunately seems to be that PM don't like me as its user. polymessageV2.mp4Client and server: Wouldn't be better an overload that accepts just a name like does the original namedPipeServerStream and other libs? I know, an user should know how to compose an appropriate url, but someone who enter IPC stuff for the first time can really have very hard time. |
Beta Was this translation helpful? Give feedback.
-
Oh! I believed it was named pipes, but from the log it is showing memory mapped files. Is this shared memory which is supposed to be even faster than named pipes. This is really a great thing! |
Beta Was this translation helpful? Give feedback.
-
I have read that named pipes alone does not make big difference. What really makes difference is Shared Memory, but there are lot of dangers and things to take care about. It's good that your lib frees the final user from from all of this. |
Beta Was this translation helpful? Give feedback.
-
I am afraid that you are busy and I have abused enough your time. As of now, I like PM, but it's not of much use for me due to lack of IPC which is the main feature I need. I'll put your repo in my favourite and I will check every while to see if there are good news. |
Beta Was this translation helpful? Give feedback.
-
I couldn't find a way for a better title. As you saw I am trying all the possible alternatives. The most recent one is gRPC and I think it's time for me to go into a conclusion because I have lost enough time.
This is the time I experienced with PolyMessage to exchange data.
polymessage.mp4
And this with grpc-dotnet using grpc-dotnet-namedpipes
gRPC_namedPipes.mp4
I am not sure if such big difference is due to TCP vs Pipes. I also tried gRPC (IPC over Unix domain socket), a bit slower, but still fast. Regular Http/2 was still faster than PM.
vs-streamjsonrpc over named pipes was very slow compared to all (as you saw in the video) and I reported this to their repo.
Sincerely I start to think that gRPC is the best alternative, it's under active development (it's google) and there are so many extensions in Nuget that I was not able to reach the end of the list. It's fully integrated with VS and recommended from Microsoft (although I don't understand why they also recommends streamjsonrpc while to me seems two similar technonologies.
gRPC also allow an easy connection with lot of online services which all uses this techonogy.
NanoMsg you recommended me was also good and fast like gRPC (may be a bit less than gRPC), but extremely difficult to use. The learning curve is very long and honestly I don't know what kind of advantaged can offer compared to the others. It's like playing with pinvoke with the only documentation available is the one that refers to the native version and this add additional level of complexity.
I entered into this world from a few days and I have learned very little, but what I learned for sure is that the wrong decision will cause a big amount time to lose during development.
Let me know what you think.
At this point I am asking myself if it's really worth that you try to reinvent the wheel considering what there is out there?
What advantages you think to gain compared to other third parties?
Let me write you some similar projects I bookmarked time ago, but never tried after discovering those giants projects.
https://github.com/spazzarama/SharedMemory
https://github.com/furesoft/Furesoft.Rpc.MMF
https://github.com/seaeagle1/EasyPipes
https://github.com/cloudtoid/interprocess
https://github.com/hhblaze/SharmIPC
https://github.com/HavenDV/H.Pipes
https://github.com/RandomEngy/PipeMethodCalls
And there are others...
Some of them seems to have an architecture similar to yours.
Now I think that my last try is MagicUnion, a framework based on gRPC made from the creator of MessagePack. He also created ZString a Zero Allocation StringBuilder for .NET Core, ZLogger, another zero allocation logger built on top of a Microsoft.Extensions.Logging. I suppose all of this technogies are integrated in the Framework. I am curious to see how it performs.
Let me know what you think. I am at the beginning and the maximum I could do is make the samples working and see for which I feel better. I don't have the technical skills to go deeper and dissect every solution for pros and cons.
You are a guru in this kind of technology and I am sure that there is much more that I should know.
I will put here an update as soon as I finish to experiment with MagicOnion. After that It will be time for me to choose for a technology because I really can't afford more time in researches. Let me know your goals on PolyMessage and how you would compare with the above solutions, but first of all let know why is so slow compared to all the others.
Thanks
Thanks
Beta Was this translation helpful? Give feedback.
All reactions