I like the approach of creating one central event bus, with one loop. Each component can re-use the same port assigned to that loop and all callbacks can come through that central point. Not everybody needs that, but I find that it cleans things up.
With only one event loop handling all events from all components, you'd need a way to know which component generated which event. That might be harder to do if they share the same port, depending on the complexity of your code.