The internet of things (IoT) envisages an ultralarge-scale network of things, which will offer services to a large number of applications in numerous domains and environments. A middleware can ease application development by providing the necessary functional components for service registration, discovery and composition. Recently, there have been a large number of proposals for IoT middleware solutions, and a few recent studies have surveyed and qualitatively evaluated these IoT middleware proposals against a variety of functional features. This paper is an extension of these studies with an evaluation of four representative middlewares in a small-scale scenario to provide a more in-depth perspective of the state of the art with reference to the scale and heterogeneity of dynamic IoT environments. The results show a number of issues. Service registration, discovery and composition components still require human intervention. With such a large number of available services, these components need to be automated to enable fast deployment and adaptation of IoT applications. The scalability evaluation of new proposals should follow a holistic approach, as opposed to considering only individual components. Finally, support for user’s non-functional requirements is limited to best-effort QoS.