[PubSub] Created async publishers/subscribers never close their socket
Async publishers/subscribers remain as an object in the event loop and never garbage collected. This alone would not be a problem since they have a small memory footprint. However each pub/sub reservers a file descriptor when opening a socket connection to ZMQ network. Linux systems have limited amount of filedescriptors ~1024 by default, therefore if we have 1k pub/subs running in the background we are unable to create new publishers/subscribers.
Solution
Weak reference the publisher object so that in an event loop only one pub/sub exists at the same time, add close methods that trigger on object release that closes the socket.