imho practice is the best way to learn. keep it up
that’s also my way to learn and what allowed me to start my own game (and a reason why too).
regardless if you plan on using it. these are my thoughts on practicality:
if you are using this on servers, i might go with sockets over pipes preferably.
since that might give you more flexibility. it’s easier to have the instance on different vms/machines than on the same one. you can scale them and you can restart them. and you isolate them, which might be a nice security concern.
sockets are a bit low level for practical use. unless you are going to implement your own framework, which, unless your goal is to make a framework, i would prefer using something a bit higher level. i like osc since is fast and really easy to use, but im not sure it’s bidirectional, though nothing stops you from having a osc server on both instances and cross connect.
stomp is an alternative that i used. it’s nice since you can use it on websockets, android devices, etc. but its text based like http, so its slower.
and aside all that, i recommend you take a look at cbor, unreal has an implementation for it.
its like json but binary (there are still places where i would use json but for pipe transmission, it might be preferrable).
and is also widely available, like in python and others.
all the best, and i hope you make public your findings and learning (even with a github project), so others can learn too.