A method of transmitting time-sensitive data from a server to a plurality of client terminals (104, 108), comprising: constructing a separate virtual queue for the each of the client terminals (104,108) at the server, wherein the virtual queue for each of the client terminals (104, 108) comprises a low-priority sub-queue associated with data of low time-sensitivity, and a normal-priority sub-queue associated with data of a higher time-sensitivity; instantiating at least one queue serving engine for serving the separate virtual queues; receiving requests from the plurality of client terminals (104, 108) to subscribe to a topic; receiving a data message relating to the topic; determining that the received data message is a low time-sensitivity message; storing the data message on a storage device at the server by dividing the data message into fragments and storing each fragment; adding separate references to each fragment of the data message to the low-priority sub-queues for those client terminals (104, 108) subscribed to the topic, wherein the references are to where the associated fragments are stored on the storage device; and independently serving each virtual queue with the at least one queue serving engine, wherein each queue serving engine determines in dependence on the virtual queue contents when to transmit the data message to the virtual queue's associated client terminal (104, 108), thereby transmitting one of the fragments from the low-priority sub-queue if no data messages are waiting in the normal-priority sub-queue; wherein, responsive to determining that one of the fragments cannot be transmitted due to data messages waiting in the normal-priority sub-queue, and that at least one previous fragment from the data message has previously been transmitted, and that the elapsed time since the at least one previous fragment was transmitted is greater than a predefined value, and that greater than a first proportion of the fragments from the data message have previously been transmitted, the step of independently serving each virtual queue further comprises moving the remaining fragments to the normal-priority sub-queue; and wherein, responsive to determining that one of the fragments cannot be transmitted due to data messages waiting in the normal-priority sub-queue, and that at least one previous fragment from the data message has previously been transmitted, and that the elapsed time since the at least one previous fragment was transmitted is greater than a predefined value, and that greater than the first proportion of the fragments from the data message have not previously been transmitted, and that less than a second proportion of the fragments from the data message have previously been transmitted, the step of independently serving each virtual queue further comprises removing the remaining fragments from the queue and adding a message to the associated client terminal to delete the previously transmitted fragments. constructing a separate virtual queue for the each of the client terminals (104,108) at the server, wherein the virtual queue for each of the client terminals (104, 108) comprises a low-priority sub-queue associated with data of low time-sensitivity, and a normal-priority sub-queue associated with data of a higher time-sensitivity; instantiating at least one queue serving engine for serving the separate virtual queues; receiving requests from the plurality of client terminals (104, 108) to subscribe to a topic; receiving a data message relating to the topic; determining that the received data message is a low time-sensitivity message; storing the data message on a storage device at the server by dividing the data message into fragments and storing each fragment; adding separate references to each fragment of the data message to the low-priority sub-queues for those client terminals (104, 108) subscribed to the topic, wherein the references are to where the associated fragments are stored on the storage device; and independently serving each virtual queue with the at least one queue serving engine, wherein each queue serving engine determines in dependence on the virtual queue contents when to transmit the data message to the virtual queue's associated client terminal (104, 108), thereby transmitting one of the fragments from the low-priority sub-queue if no data messages are waiting in the normal-priority sub-queue;