In order to ensure the device-level interoperability in IoT where two devices with different communication protocols can talk to each other, different solutions exist utilizing either server, broker, middleware, or gateways. Can someone highlight the difference between these when used in IoT?