Multicasting data in a data stream
Patent Information
- Application Number
- JP2025536283
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2022-12-20
- Filing Date
- 2023-12-19
- Publication Date
- 2025-12-26
AI Technical Summary
Existing multicast communication systems are inefficient and unscaleable when multiple clients require different data streams from a server system, especially when the number of clients is large, as unicast techniques become impractical due to the need for individual data transmission to each client.
A server system that multicasts data to multiple clients by associating each client with a unique identifier, encoding the mapping between identifiers and multicast streams, and transmitting data streams using the same multicast address, allowing clients to retrieve targeted data streams efficiently and scalably.
Enables efficient and scalable communication by ensuring each client receives only the data relevant to them, optimizing multicast address allocation and reducing the need for separate messaging, thus improving processing efficiency and reducing overhead.
Smart Images

Figure 00000000_0000_ABST
Abstract
Description
[Technical Field]
[0001] This application claims priority to U.S. Patent Application No. 18 / 084,856, filed December 20, 2022, which is incorporated herein by reference in its entirety. [Background technology]
[0002] In computer networking, multicast refers to a communication technique in which data is sent to multiple groups of recipients on a network. For example, Internet Protocol (IP) multicast is a multicast communication technique that uses a network's IP infrastructure. Multicast allows for scalable one-to-many communication because data only needs to be sent once and is delivered to many recipients. Therefore, multicast can be useful in systems where multiple clients require the same data from a single data source.
[0003] On the other hand, in some situations, different clients may require different data from the same data source, or may require different data from different data sources. Unicast techniques allow a data source to communicate individually with different clients on a network. However, when the number of clients is large, e.g., hundreds or thousands, unicast techniques may not be efficient. [Brief explanation of the drawings]
[0004] With reference to the following drawings, specific embodiments are disclosed. [Figure 1] FIG. 1 illustrates a block diagram of an example computing device that may be used to implement certain embodiments. [Figure 2] FIG. 2 illustrates a block diagram of an example system in which certain embodiments may be implemented. [Figure 3] FIG. 3 shows a schematic diagram of the mapping according to the first embodiment. [Figure 4] FIG. 4 shows a schematic diagram of a multicast packet according to the first embodiment. [Figure 5] FIG. 5 shows a schematic diagram of a multicast packet according to the second embodiment. [Figure 6] FIG. 6 illustrates a flow diagram of a method performed by a server system, according to a particular embodiment. [Figure 7] FIG. 7 illustrates a flow diagram of a method performed by a client system according to a particular embodiment. [Figure 8] FIG. 8 shows a flow diagram of a method performed by a server system according to a first embodiment. [Figure 9] FIG. 9 shows a flow diagram of a method performed by a server system according to a second embodiment. [Figure 10] FIG. 10 illustrates a block diagram of an exemplary electronic trading system in which certain embodiments may be employed. [Figure 11] FIG. 11 illustrates a block diagram of another exemplary electronic trading system in which certain embodiments may be employed. DETAILED DESCRIPTION OF THE INVENTION
[0005] The disclosed embodiments relate generally to multicast communications, and more particularly to a system and method for a server system to multicast data to multiple clients. Multicast techniques are useful in situations where multiple clients all require the same data from a server system. Multicast techniques are scalable to the number of clients, even when distributed to a large number of clients, because the data is only sent once. For these and other reasons, a server system may be configured to multicast data to, for example, thousands, hundreds of thousands, or even more clients. However, situations may arise where different clients require different data from the server system. This may occur, for example, when the server system receives multiple different data streams, each associated with and intended for a different client. Using unicast techniques allows the server system to communicate with different clients individually, thereby enabling different clients to obtain different data streams from the server system. However, unicast techniques do not scale to the number of clients because data must be sent individually from the server system to each client. Therefore, using unicast techniques is inefficient and may not be feasible when there are tens of thousands or hundreds of thousands of clients or more. In such situations, it is desirable to adapt a multicast system that is efficient and scalable to the number of clients, allowing different clients to obtain different data.
[0006] I. BRIEF DESCRIPTION OF SPECIFIC EMBODIMENTS
[0007] Certain embodiments provide a server system including a memory and at least one processor configured to multicast data to multiple clients. Each client may include software running on a computing device. In an example embodiment, there may be one client per device. More generally, multiple clients may run on one or more devices. Each client stores an identifier indicating a data stream associated with, e.g., intended for, the client. For example, an ID server may generate an identifier for each of multiple data streams and provide each client with an identifier indicating the data stream with which the client is associated. The ID server may also provide the generated identifier to the server system. The at least one processor of the server system is configured to receive data streams, e.g., from a data source, and determine an identifier for each received data stream. The at least one processor of the server system is configured to send a mapping between each identifier and a respective multicast stream to the multiple clients and multicast data of the received data stream according to the mapping. These features enable different clients to obtain different data streams using efficient and scalable multicasting. Specifically, the server system transmits a mapping between an identifier and each multicast stream, and multicasts the data of the received data stream according to the mapping, so that each client can obtain data of a specific data stream with which it is associated (e.g., a data stream related to and targeted to it). Targeted and scalable data transmission can be provided.
[0008] In certain embodiments, each client receives the mapping, matches an identifier stored at the client with an identifier in the received mapping, and retrieves the data of the multicast stream mapped to the matching identifier. Thus, each client retrieves the data of the particular data stream with which it is associated (e.g., a data stream related to and intended for it). Thus, different clients can retrieve different data from the server system using multicast.
[0009] In certain embodiments, the mappings sent to the multiple clients include a mapping between each identifier and a respective different multicast address, and at least one processor of the server system is configured to multicast data for each data stream using the respective multicast address mapped to the identifier of the data stream. This may allow data from each data stream to be sent only to clients or devices associated with that data stream. This may enable efficient communication (e.g., compared to sending data for all received streams to all clients). Thus, efficient, targeted, and scalable communication may be provided. In these embodiments, each client may configure its communication interface to receive data sent at a destination address corresponding to the multicast address mapped to an identifier matching the stored identifier. Thus, each client may obtain data for the particular data stream with which it is associated from the multicast stream.
[0010] In certain embodiments, at least one processor of the server system is configured to broadcast the mapping over a network to which each of the multiple clients is connected, which may ensure that all of the clients receive the mapping, allowing the mapping to be provided in an efficient and scalable manner (e.g., as compared to providing the mapping to each client individually, e.g., using unicast messaging).
[0011] In certain embodiments, at least one processor in the server system is configured to generate, for each data stream, a multicast stream including an identifier for the data stream and data of the data stream, thereby encoding a mapping into each multicast stream. The at least one processor in the server system is configured to multicast each generated multicast stream to multiple clients. Because the mapping is encoded into the multicast stream itself, separate messaging to communicate the mapping to clients is not required. Therefore, efficient and scalable communication can be provided. Furthermore, because the mapping is encoded into the multicast stream, each multicast stream can use the same multicast address. Therefore, efficient and scalable utilization of multicast address allocation is possible. Furthermore, because each multicast stream can use the same multicast address, separate procedures related to different clients requesting to join separate multicast addresses are not required. Therefore, efficient and scalable communication can be provided. In these embodiments, each client can receive multiple multicast streams and obtain data from a multicast stream that includes an identifier matching the stored identifier among the received multiple multicast streams. Therefore, each client can obtain data from the multicast stream for the specific data stream with which it is associated.
[0012] In certain embodiments, each multicast stream includes one or more multicast packets including a header and a payload, and for each generated multicast stream, the header may include an identifier for the received data stream and the payload may include data for the received data stream. Including the identifier in the multicast packet header allows a client (e.g., its application programming interface) to efficiently identify which multicast packets contain data from a data stream associated with the client. For example, parsing the header for an identifier may be more efficient than parsing the payload. Efficient and scalable communications may be provided.
[0013] In certain embodiments, each generated multicast stream is multicast using the same multicast address, thus enabling efficient and scalable use of multicast address allocation. Furthermore, this may eliminate the need to perform separate steps associated with different clients requesting to join separate multicast addresses. Efficient and scalable communications may be provided.
[0014] In particular embodiments, the at least one processor is configured to normalize data for each of the multiple received streams being multicast. For example, the data may be converted into a format understandable by a client, e.g., the client's API. This allows for centralized normalization, which may be more efficient than, for example, each client locally normalizing or converting the data it receives.
[0015] In certain embodiments, at least one processor is configured to receive multiple data streams via respective multiple different connections and, for each received data stream, determine an identifier for the received data stream based on the connection on which the data stream was received. This may ensure a one-to-one mapping between the connection on which each data stream is received and the multicast stream to be multicast. This may enable simplified processing of received data streams into multicast streams. For example, this may enable a data stream received on a particular connection to provide data for a particular multicast stream. This may be more efficient than aggregating multiple data streams into a single multicast stream. Furthermore, this may enable parallel processing of different received data streams and each different multicast stream. Therefore, efficient and fast processing may be provided.
[0016] In certain embodiments, the at least one processor is configured to receive an identifier associated with each respective connection information establishing a connection over which each of the data streams is received, and to determine, for each of the plurality of received data streams, an identifier associated with the connection information of the connection over which the data stream is received as an identifier for the data stream. This may provide a method for the server system to efficiently determine an identifier for each of the data streams. For example, the server system may associate an identifier with the connection over which the data stream is received and determine the identifier for the data stream received on that connection. This may be more efficient than, for example, if the server system had to parse the data stream to determine the identifier for the data stream. Thus, efficient processing of the data streams may be provided.
[0017] In a particular embodiment, each data stream is associated with a particular client, and the server system includes an ID server configured to: obtain connection information for each client; associate the connection information for each different client with a different one of the identifiers; provide at least one processor, for each client, an identifier that is associated with the connection information for the client; and provide, for each client, an identifier that is associated with the connection information for the client. This provides a way to efficiently provide identifiers to both the server system and clients. The ID server is responsible for the association and distribution, which allows communication from the server system to clients to be maintained as multicast or broadcast, and therefore scalable.
[0018] In certain embodiments, the at least one processor is configured to receive, for each of a plurality of data streams, connection information for establishing a connection to a data source from which the data stream is received, establish the connection using the connection information, and receive the data stream over the connection. This allows the server system to receive the data stream on behalf of the client. This allows the data of the data stream to be provided to the client by the server system, for example, as part of a platform provided by the server system. For example, the data of the data stream may be provided along with other data that the server system multicasts to all clients as part of the platform. This therefore allows the data source to be integrated into the platform provided by the server system.
[0019] In certain embodiments, each data stream is associated with a particular client, and for each data stream, the connection information includes login information for the client associated with the data stream to access the data source. This allows the data stream to include client-specific data, such as data configured in a data source account to be delivered to a particular account, thereby providing efficient messaging tailored to individual clients.
[0020] In certain embodiments, the server system implements a price server for an electronic trading system. The primary role of a price server is to distribute the same data (e.g., the same market data) to many different clients. The price server may use multicasting to distribute this data in an efficient and scalable manner. The server system may be implemented within a price server to provide a price server that not only multicasts the same data to multiple clients, but also multicasts data so that different clients can obtain data from different data streams.
[0021] In certain embodiments, the server system includes a data source configured to provide multiple data streams to at least one processor, where the multiple different data streams may include price data provided by different liquidity providers or combinations of different liquidity providers. This is an example situation in which different clients (or their users) may require different data streams. For example, each client (or its users) may have an existing relationship with a particular provider or combination of providers and therefore may require receiving data from that particular provider or combination of providers. The particular provider or combination of providers may differ for different clients (or their users). Therefore, it is useful to enable each client to obtain data from the data stream associated with that client.
[0022] Certain embodiments provide a server system including a memory and at least one processor configured to multicast data to a plurality of clients. Each client stores an identifier indicating a data stream associated with the client. The at least one processor is further configured to: receive a plurality of data streams, each data stream including data; determine an identifier for each of the plurality of received data streams; generate a mapping between each identifier and a respective different multicast address; and broadcast the mapping to the plurality of clients; and, for each received data stream, multicast data using the multicast address mapped to the determined identifier for the received data stream. This allows data from each data stream to be sent only to clients associated with that data stream. This allows for efficient communication (e.g., compared to sending all data for a received stream to all clients). Thus, efficient, targeted, and scalable communication may be provided.
[0023] Certain embodiments provide a server system including a memory and at least one processor configured to multicast data to a plurality of clients. Each client stores an identifier indicating a data stream associated with the client. The at least one processor is further configured to: receive a plurality of data streams, each data stream including data; determine an identifier for each of the plurality of received data streams; generate, for each received data stream, a multicast stream including the identifier for the received data stream and the data of the received data stream; and multicast the generated multicast stream to a plurality of clients. Because the mapping is encoded in the multicast stream itself, no separate messaging is required to communicate the mapping to the clients. Efficient and scalable communication can be provided. Furthermore, because the mapping is encoded in the multicast stream, each multicast stream can use the same multicast address. Therefore, efficient and scalable utilization of multicast address allocation is possible. Furthermore, because each multicast stream can use the same multicast address, different clients can request to join different multicast addresses without having to perform separate associated procedures. Efficient and scalable communication can be provided.
[0024] Certain embodiments provide a client system including a memory that stores identifiers indicating data streams associated with clients of the client system, and at least one processor that receives, from a server system, a mapping between a plurality of identifiers and a respective plurality of multicast streams, matches the stored identifiers with identifiers in the mapping, and retrieves data of the multicast streams that are mapped to the matching identifiers in the mapping, thereby enabling the clients to retrieve data associated with the clients, for example, from multicast streams intended for the clients.
[0025] In certain embodiments, the mapping includes a mapping between a plurality of identifiers and a respective plurality of different multicast addresses, and at least one processor of the client system is further configured to: configure a communications interface of the client system to receive data transmitted at a destination address corresponding to a multicast address mapped to a matching identifier in the mapping, thereby allowing the client to receive only relevant multicast streams, which may be more efficient than, for example, each client receiving multiple multicast streams and determining which multicast streams are associated with the client system.
[0026] In a particular embodiment, the mapping is provided by including a respective identifier in each of a plurality of multicast streams, and at least one processor of the client system is further configured to: receive the plurality of multicast streams; and retrieve data from one of the plurality of multicast streams that includes an identifier that matches the stored identifier. Because the mapping is encoded in the multicast stream itself, separate messaging is not required to convey the mapping to the client. Efficient and scalable communications can be provided. Furthermore, because the mapping is encoded in the multicast stream, each multicast stream can use the same multicast address. This allows each client to be configured, e.g., pre-configured, to receive data at a destination address that has a general multicast address common to all clients. Therefore, efficient and scalable utilization of multicast address allocation is possible. Furthermore, separate procedures related to different clients requesting to join different multicast addresses do not need to be performed. Efficient and scalable communications can be provided.
[0027] Certain embodiments provide a method for multicasting data to multiple clients, where each client stores an identifier indicating a data stream associated with the client. The method includes, by a server system: receiving multiple data streams, each containing data; determining an identifier for each of the multiple received data streams; transmitting a mapping between each identifier and a respective multicast stream to the multiple clients; and multicasting data of the multiple received data streams according to the mapping. As noted above, this method may provide targeted and scalable data transmission.
[0028] Certain embodiments provide a tangible computer-readable medium containing instructions that, when executed, cause at least one processor of a server system to perform functions. The at least one processor is configured to multicast data to a plurality of clients, each client storing an identifier indicating a data stream associated with that client. The functions include at least the following: receiving a plurality of data streams, each including data; determining an identifier for each of the plurality of received data streams; transmitting a mapping between each identifier and a respective multicast stream to the plurality of clients; and multicasting data of the plurality of received data streams according to the mapping. As described above, this method may provide targeted and scalable data transmission.
[0029] II. Examples of Computing Devices
[0030] FIG. 1 shows a block diagram of an exemplary computing device 100. Computing device 100 may be used to implement certain embodiments described herein. In other examples, other computing devices may be used. Computing device 100 includes a communication bus 110, a processor 112, a memory 114, a network interface 116, input devices 118, and output devices 120. Processor 112, memory 114, network interface 116, input devices 118, and output devices 120 are coupled to communication bus 110. Computing device 100 is connected to an external network 140, such as a local area network (LAN) or a wide area network (WAN) such as the Internet. Computing device 100 is connected to external network 140 via network interface 116. Computing device 100 may include additional, different, or fewer components. For example, multiple communication buses (or other types of component interconnects), multiple processors, multiple memory devices, multiple interfaces, multiple input devices, multiple output devices, or any combination thereof may be provided. As another example, computing device 100 may not include input devices 118 or output devices 120. As another example, one or more components of computing device 100 may be combined into a single physical element, such as a field programmable gate array (FPGA) or a system on a chip (SoC).
[0031] Communication bus 110 may include a channel, electrical or optical network, circuit, switch, fabric, or other mechanism for communicating data between components within computing device 100. Communication bus 110 is communicatively coupled to any of the components of computing device 100 and may transfer data therebetween.
[0032] Processor 112 may be any suitable processor, processing unit, or microprocessor. Processor 112 may include, for example, one or more general-purpose processors, digital signal processors, application-specific integrated circuits, FPGAs, analog circuits, digital circuits, programmed processors, and / or combinations thereof. Processor 112 may be a multi-core processor that may include multiple processing cores of the same or different types. Processor 112 may be a single device or a combination of devices, such as one or more devices associated with a network or distributed processing system. Processor 112 may support various processing strategies, such as multiprocessing, multitasking, parallel processing, and / or remote processing. Processing may be performed locally or remotely and may be moved from one processor to another. In particular embodiments, computing device 100 is a multi-processor system and, as such, may include one or more additional processors communicatively coupled to communication bus 110.
[0033] Processor 112 is operable to execute logic and other computer-readable instructions encoded on one or more tangible media, such as memory 114. As used herein, logic encoded on one or more tangible media includes instructions executable by processor 112 or another processor. Logic may be stored as part of software, hardware, an integrated circuit, firmware, and / or microcode, for example. Logic may be received from an external communication device via communications network 140. Processor 112 may execute logic to perform the functions, operations, or tasks described herein.
[0034] Memory 114 may be one or more tangible media, such as, for example, a computer-readable storage medium. Computer-readable storage media may include various types of volatile and non-volatile storage media, such as, for example, random access memory, read-only memory, programmable read-only memory, electrically programmable read-only memory, electrically erasable read-only memory, flash memory, any combination thereof, or other tangible data storage devices. As used herein, the terms "non-transitory" or "tangible computer-readable medium" are expressly defined to include any type of computer-readable medium and to exclude propagating signals. Memory 114 may include any desired type of mass storage device, such as a hard disk drive, optical media, magnetic tape or disks, etc.
[0035] Memory 114 may include one or more memory devices. For example, memory 114 may include cache memory, local memory, mass storage, volatile memory, non-volatile memory, or a combination thereof. Memory 114 may be adjacent to processor 112, part of processor 112, programmed with processor 112, networked with processor 112, and / or remote from processor 112, such that data stored in memory 114 may be retrieved and processed by processor 112, for example. Memory 114 may store instructions executable by processor 112. The instructions may be executed to perform one or more operations or functions described herein.
[0036] The memory 114 may store an application 130 that implements the disclosed techniques. In particular embodiments, the application 130 may be accessed from or stored in different locations. The processor 112 may access the application 130 stored in the memory 114 and execute computer-readable instructions included in the application 130.
[0037] Network interface 116 may include one or more network adapters. The network adapters may be wired or wireless network adapters. Network interface 116 enables computing device 100 to communicate with an external network 140. Computing device 100 may communicate with other devices through network interface 116 using one or more network protocols, such as Ethernet, Internet Protocol (IP), Transmission Control Protocol (TCP), User Datagram Protocol (UDP), a wireless network protocol such as Wi-Fi, a Long Term Evolution (LTE) protocol, or other suitable protocols.
[0038] The input devices 118 may include positional input devices such as a mouse, touchpad, touchscreen, keyboard, buttons, switches, and / or other human-machine interface devices. The output devices 120 may include a display, such as a liquid crystal display (LCD), cathode ray tube (CRT), light emitting diode (LED) display (e.g., an OLED display), or other suitable display.
[0039] In particular embodiments, during the installation process, the application may be transferred from input device 118 and / or network 140 to memory 114. When computing device 100 is executing or preparing to execute application 130, processor 112 may obtain instructions from memory 114 via communication bus 110.
[0040] III. Example Systems
[0041] 2 illustrates an exemplary system 200 in which certain embodiments disclosed herein may be used. System 200 includes client devices 202a, 202b, an ID server 204, a server system 206, and a data source 208. One or more of client devices 202a, 202b, ID server 204, server system 206, and data source 208 may be implemented by a computing device, such as computing device 100 described above in connection with FIG. 1. In this example, each client device 202a, 202b includes a client (i.e., a portion of software) running on the respective computing device.
[0042] The client devices 202a, 202b communicate with the ID server 204 via a first network 210. For example, the first network 210 may be a local area network or a wide area network such as the Internet. The client devices 202a, 202b communicate with the server system 206 via a second network 212. The second network 212 is a multicast network, a network in which multicast messaging is implemented. For example, the second network 212 may be a suitable local area network, internal network, private network, or virtual private network (VPN). The ID server 204 communicates with the server system 206 via a third network 214. For example, the third network 214 may be a private network or a VPN. The server system 206 communicates with the data source 208 via a fourth network 216. For example, the fourth network 216 may be a local area network or a wide area network such as the Internet. One or more of the first network 210, the second network 212, the third network 214, and the fourth network 216 may be the same network.
[0043] In this example, each client device 202a, 202b, or its user, has an existing relationship with the data source 208. Specifically, each client device 202a, 202b, or its user, has an account with the data source 208. In arrangements other than that shown in FIG. 2, each client device 202a, 202b may connect directly to the data source 208, log in to a particular account at the data source 208, and be provided with a data stream from the data source 208 that includes data tailored to the particular account. In such other situations, the data source 208 may provide different data streams to different client devices 202a, 202b through different connections. However, in the example of FIG. 2, the client devices 202a and 202b are not directly connected to the data source 208. In this example, the client devices 202a, 202b are in communication with a server system 206, which is configured to multicast data to the multiple client devices 202a, 202b via a second network 212. This allows the server system 206 to provide the same data to each of multiple client devices 202 a, 202 b in an efficient and scalable manner. However, it is desirable for the server system 206 to provide data from different data streams for different accounts of the data source 208 to the appropriate client device 202 a, 202 b. That is, it is desirable for each client device 202 a, 202 b to be able to obtain data from the server system 206 for each associated data stream generated by the data source 208. This may be the case, for example, when each client device 202 a, 202 b uses a platform provided by the server system 206 and it is desirable for the data stream data to be provided within the context of that platform.
[0044] In the embodiment of FIG. 2 , each client device 202 a, 202 b is associated with a data stream provided by a data source 208. As previously described, different client devices 202 a, 202 b can obtain data from different data streams provided by the data source 208. For example, one or more of the client devices 202 a, 202 b may be a personal computer or a mobile device operated by a user. A user of a particular client device 202 a, 202 b may desire to display data from a particular data stream provided by the data source 208, specifically a data stream generated by the data source 208 for the user's account. As another example, one or more of the client devices 202 a, 202 b may be a server or other computing device. An algorithm or other process executing on a particular computing device 202 a or 202 b may be configured to receive input data from a particular data stream provided by the data source 208, specifically a data stream generated by the data source 208 for the account associated with that process.
[0045] Each client device 202a, 202b has connection information for establishing a connection with a data source 208 over which it can receive data streams associated with the client device 202a, 202b. For example, the connection information may be information that a particular client device 202a, 202b could otherwise use to connect directly to the data source 208 and receive data streams generated for the account associated with the particular client device 202a, 202b. The connection information for a particular client device 202a, 202b includes address information for the data source 208 and account information for accessing the data source 208. The address information includes an IP address and port number to which a TCP connection can be established to receive data streams from the data source 208. The account information may include login information used by the data source 208 to identify and access a particular account. For each particular account, the data source 208 provides a different data stream.
[0046] Each client device 202a, 202b provides the ID server 204 with respective connection information for connecting to the data source 208. For example, this may occur when each client device 202a, 202b registers with the platform provided by the server system 206. Thus, the ID server 204 obtains the connection information for each client device 202a, 202b. The ID server 204 associates the connection information for each different client device 202a, 202b with an identifier. As one example, the ID server 204 may generate an identifier for the connection information for each client device 202a, 202b. For example, a randomly generated identifier may be assigned to the connection information for each client device 202a, 202b. As another example, each identifier may be generated based on the connection information for the respective client device 202a, 202b. In another example, the identifiers do not necessarily have to be generated; instead, the ID server 204 may assign one of a number of pre-generated identifiers to the connection information for each client device 202 a, 202 b, each of which only needs to be unique among at least the client devices 202 a, 202 b.
[0047] The ID server 204 provides the server system 206 with connection information for each client device 202a, 202b, along with an identifier associated with the connection information. Thus, the server system 206 obtains the connection information for each client device 202a, 202b and the identifier associated with the connection information for each client device 202a, 202b. The server system 206 stores the connection information along with the identifier for each client device 202a, 202b. For each client device 202a, 202b, the server system 206 uses the connection information to establish a connection with the data source 208. Specifically, for each client device 202a, 202b, the server system 206 uses the associated address information to establish a TCP connection with the data source 208 and the associated login information to access the associated account at the data source 208. For a given account, the data source 208 generates a data stream and transmits the data stream through an associated connection with the server system 206. In this case, there is a one-to-one mapping between the different data streams generated by the data source 208 and the number of connections between the server system 206 and the data source 208.
[0048] The ID server 204 provides each client device 202a, 202b with an identifier associated with the connection information for the client device 202a, 202b. Thus, each client device 202a, 202b receives an identifier indicating the data stream associated with the client device 202a, 202b. Each client device 202a, 202b stores the received identifier. As a result, each client device 202a, 202b stores an identifier indicating the data stream associated with the client device 202a, 202b.
[0049] As a result of the above steps, each client device 202a, 202b stores an identifier indicating the data stream associated with the client device 202a, 202b. The server system 206 receives multiple data streams containing data. Specifically, for each client device 202a, 202b, the server system 206 receives from the data source 208 a data stream provided for the account associated with the client device 202a, 202b via a connection established using the connection information for the client device 202a, 202b. As described in more detail below, the server system 206 multicasts the data of the received streams so that each client device 202a, 202b can obtain the data of its associated data stream. In this manner, the data source 208 can be integrated with the platform provided by the server system 206. In some embodiments, the server system 206 may convert and / or translate the data of each received data stream before multicasting it. For example, the server system 206 can convert the protocol used and understood by the data source 208 (and therefore the protocol through which the data stream is received from the data source 208 to the server system 206) into a protocol used and understood by each of the client devices 202a, 202b.
[0050] As described above, the server system 206 receives multiple data streams. In this example, the server system 206 receives the multiple data streams via a respective multiple different connections with the data source 208 described above. The server system 206 determines an identifier for each of the multiple data streams. Specifically, for each received data stream, the server system 206 determines an identifier for the received data stream based on the connection through which the data stream is received. The server system 206 may store each identifier along with the respective connection information establishing the connection through which each of the data streams is received. Thus, for each of the multiple received data streams, the server system 206 may determine an identifier for the data stream that is associated with the connection information for the connection through which the data stream is received. In other words, for a data stream received via a particular connection with the data source 208, the server system 206 may determine an identifier for that data stream as the identifier associated with the connection information for that connection.
[0051] The server system 206 transmits a mapping between each identifier and a respective multicast stream to the multiple client devices 202a, 202b and multicasts the data of the received data stream (e.g., appropriately transformed data) according to the mapping. Each client device 202a, 202b receives the mapping between the multiple identifiers and a respective one of the multiple multicast streams, matches the identifier stored in the client device 202a, 202b with an identifier in the mapping, and receives the data of the multicast stream mapped to the matching identifier in the mapping. As described in more detail below with reference to FIGS. 5 and 6, in some embodiments, this may include multicasting the data of the received data stream using different multicast addresses. As described in more detail below with reference to FIG. 7, in some embodiments, this may include generating multicast streams each including a different identifier. In either case, by providing the mapping to the multiple client devices 202a, 202b and multicasting the data of the received data stream according to the mapping, the client devices 202a, 202b can obtain the data of the associated data stream via multicast. Thus, adaptive and scalable communications are provided.
[0052] IV. Multicast Addresses
[0053] Generally, the server system 206 is configured to multicast data to multiple client devices 202a, 202b. In some embodiments, IP multicast may be used. IP multicast uses the IP infrastructure within a network, such as the second network 212. In IPv4 and IPv6, specially reserved multicast IP address blocks are used. The server system 206 includes a multicast address as the IP destination address of packets sent over the second network 212. Nodes in the second network 212, such as network switches and routers, replicate the packets to reach the multiple client devices 202a, 202b. Specifically, each client device 202a, 202b first registers its interest in receiving data transmitted using a particular multicast address by sending a join request to the network indicating the multicast address. For example, the join request may be sent using the Internet Group Management Protocol (IGMP). The nodes in the second network 212 build a multicast distribution tree for the particular multicast address based on the received join request. For example, this can be done using Protocol Independent Multicast (PIM). Using the multicast distribution tree, the second network 212 routes multicast packets from the server system 206 with a particular multicast address as the destination address so that they are received by each of the client devices 202a and 202b.
[0054] As described above, the server system 206 receives multiple data streams from the data source 208, determines an identifier for each received data stream, and transmits a mapping between each identifier and a respective multicast stream to the multiple client devices 202a, 202b. In some embodiments, the mapping includes a mapping between each identifier and a different multicast address for each of the multicast streams. The different multicast addresses in the mapping represent different destination addresses to which data for the different data streams will be multicast by the server system 206. The server system 206 may generate the mapping. For example, for each received data stream, the server system 206 associates the identifier determined for that data stream with a multicast address. The server system 206 can assign a multicast address to a particular identifier from a pool of available multicast addresses. The server system 206 can store these assignments in a data structure, e.g., a table, to generate the mapping.
[0055] FIG. 3 illustrates an example of a mapping 302 between identifiers and respective multicast addresses. In this example, each multicast address includes an IP address and a port number. Specifically, in the example of FIG. 3, a first identifier 28454930 associated with a first data stream associated with a first client device 202a is assigned to a first multicast address having an IP address 239.225.225.X and a port number P. Also, a second identifier 74504482 associated with a second data stream associated with a second client device 202b is assigned to a second multicast address having an IP address 239.225.225.Y and a port number Q. By way of example, the IP addresses of the first and second multicast addresses may be the same, but the port numbers may be different. In another example, the IP addresses of the first and second multicast addresses may be different, and the port numbers may be the same or different. In either case, a different multicast address is assigned to each different identifier, thereby generating the mapping 302.
[0056] Returning to FIG. 2, in this example, the server system 206 broadcasts the mapping 302 to multiple client devices 202a, 202b. Specifically, the server system 206 broadcasts the mapping over the second network 212, where it is received by all client devices 202a, 202b connected to the second network 212. For example, in IPv4, a packet can be broadcast to all devices on the network by including a special value in the host identification portion of the IP address. As another example, in IPv6, broadcasting to all client devices 202a, 202b connected to the second network 212 can be achieved by including an "all IPv6 devices" multicast address in the destination address. In either case, the mapping 302 is broadcast to multiple client devices 202a, 202b. The mapping 302 can be included in the payload of one or more broadcast packets.
[0057] Each client device 202a, 202b receives a mapping 302 between a plurality of identifiers and a respective plurality of multicast addresses from the server system 206. Each client 202a, 202b may extract the mapping 302 from the received broadcast packet and match the identifier stored on the client device with the identifier included in the mapping 302. For example, in the first client device 202a, the first identifier is stored as 28454930. The first client device 202a parses the mapping 302 and matches the first identifier 28454930 with the identifier 28454930 in the mapping 302. Each client device 202a, 202b may configure its communication interface to receive data transmitted with a destination address corresponding to the multicast address that is mapped to a matching identifier in the mapping 302. For example, for the first client device 202a, the multicast address that is mapped to a matching identifier in the mapping 302 is a first multicast address, specifically IP address 239.225.225.X and port number P. In response, the first client device 202a sends a join request to the second network 212 specifying the first multicast address, specifically IP address 239.225.225.X and port number P. The second network 212 is then configured to route packets whose destination address is the first multicast address to the first client device 202a. The communication interface of the first client device 202a is configured to receive (e.g., rather than drop) packets whose destination address is the first multicast address.
[0058] For each received data stream, the server system 206 multicasts the data of the received data stream using a multicast address that is mapped to an identifier determined for the received data stream. For example, for each received data stream, the server system 206 can extract data from the received data stream and include the data (or data derived therefrom) in packets of the multicast stream. The server system 206 includes the multicast address that is mapped to the identifier determined for the received data stream as a destination address of packets of the multicast stream. For example, referring again to FIG. 3, for the first data stream for which a first identifier 28454930 has been determined, the server system generates a multicast stream based on the data from the first data stream. All packets of this generated multicast stream have the first multicast address (i.e., IP address 239.225.225.X and port number P) as a destination address.
[0059] FIG. 4 illustrates a multicast stream packet 400 according to an embodiment. For each received data stream, the associated multicast stream may consist of one or more such multicast packets 400. The multicast packet 400 includes a header 410 and a payload 420. For each received data stream, the associated multicast packet's header 410 includes a multicast address 412, which maps to an identifier determined for the data stream, as a destination address, and the payload 420 includes data 422 for the received data stream. The received data stream data 422 may include data included in the received data stream and / or data derived from the data included in the received data stream. For example, for each received stream, the server system 206 may process, e.g., normalize, the data of the received data stream and include the resulting processed data, e.g., normalized data, as data 422 in one or more packets 400 of the associated multicast stream.
[0060] As a result, for each received data stream, the server system 206 can multicast the respective multicast stream using a multicast address that is mapped to the identifier determined for the received data stream. Thus, data for different received data streams can be received by different client devices 202a, 202b based on the different multicast addresses used to multicast the data. Specifically, as described above, each client device 202a, 202b receives a multicast stream from the server system 206, with a destination address corresponding to a multicast address that is mapped to an identifier in the mapping 302 that matches an identifier stored by the client device 202a, 202b. In this embodiment, because different multicast streams are multicast to each different client device 202a, 202b, each client device 202a, 202b can receive data from the associated data stream (e.g., compared to sending data from all received data streams to all client devices 202a, 202b). Efficient and scalable communications can be provided.
[0061] V. Multicast streams containing identifiers
[0062] As described above, the server system 206 receives multiple data streams from the data source 208, determines an identifier for each received data stream, and transmits to the multiple client devices 202 a, 202 b a mapping between each identifier and a respective multicast stream. In some embodiments, the server system 206 generates a multicast stream for each of the multiple received data streams, the multicast stream including the identifier determined for the received data stream and the data of the received data stream. The server system 206 multicasts the generated multicast stream to the multiple client devices 202 a, 202 b. In these embodiments, the mapping between each identifier and a respective multicast stream is encoded in the multicast stream itself. That is, because each multicast stream is generated to include data from the received data stream and the identifier determined for the received data stream, each client device 202 a, 202 b can determine which multicast stream includes data from the data stream associated with it.
[0063] FIG. 5 illustrates a multicast stream packet 500 according to another embodiment. For each received data stream, the associated multicast stream may consist of one or more such multicast packets 500. The multicast packet 500 includes a header 510 and a payload 520. For each generated multicast stream, the header 510 includes an identifier 514 for the received data stream, and the payload includes data 522 for the received data stream. The data 522 for the received data stream may include data included in the received data stream and / or data derived from the data included in the received data stream. For example, for each received stream, the server system 206 may process, e.g., normalize, the data of the received data stream and include the resulting processed data, e.g., normalized data, as data 522 in one or more packets 500 of the associated multicast stream. For example, normalizing the data of the data stream may include converting the data to a format understandable by the client devices 202a, 202b. Different multicast streams are distinguished by different identifiers 514 included in the headers 510 of the packets 500 of the multicast stream. In an embodiment, each generated multicast stream is multicast by the server system 206 using the same multicast address 512. That is, each packet 500 for the different multicast streams may all include the same multicast address 512 as a destination address in the header 510. By way of example, this may be the multicast address that the client devices 202a, 202b are configured to request by default to join the second network 212.
[0064] The server system 206 may generate a first multicast stream for the received first data stream by including data of the received first data stream in the payload 520 of one or more multicast packets 500 and further including a first identifier determined for the first data stream in the header 510 of each of the multicast packets 500. The server system 206 may generate a second multicast stream for the received second data stream by including data of the received second data stream in the payload 520 of one or more multicast packets 500 and further including a second identifier determined for the second data stream in the header 510 of each of the multicast packets 500. The server system 206 may multicast the multicast stream to all of the multiple client devices 202 a, 202 b, for example, using a multicast address 512 to which all of the client devices 202 a, 202 b have subscribed as the destination address in the header of the packet 500. Thus, both the first multicast stream and the second multicast stream are transmitted to both the first client device 202a and the second client device 202b.
[0065] Each client device 202a, 202b is configured to match an identifier stored on the client device 202a, 202b with an identifier in the mapping and receive data of the multicast stream that is mapped to the matching identifier in the mapping. As described above, in this embodiment, the mapping is provided by including each identifier in a different one of the different multicast streams. Each client device 202a, 202b is configured to receive multiple multicast streams and obtain data from a multicast stream that includes an identifier that matches an identifier stored on the client device 202a, 202b. For example, the client device 202a, 202b may be configured with an application programming interface (API) configured to receive the multicast stream and analyze a given multicast stream (or each packet thereof) to determine whether it includes an identifier 514 that matches an identifier stored on the client device 202a, 202b. For example, the API function may examine the header 510 of each received multicast packet 500 to determine whether it contains an identifier 514 that matches an identifier stored by the client device 202a, 202b. If the multicast stream (or its packets) does not contain an identifier that matches the stored identifier, the API function may drop the multicast stream or packets. However, if the multicast stream (or its packets) does contain an identifier that matches the stored identifier, the API function may pass the packets (or at least a portion of its data 522) to the client device 202a, 202b. Thus, each client device 202a, 202b obtains the data for its associated data stream.
[0066] In this embodiment, because the mapping is encoded into the multicast stream itself, the server system 206 does not need to send a separate message to communicate the mapping to the client devices 202a, 202b. Therefore, efficient and scalable communications can be provided. Furthermore, in this embodiment, because the mapping is encoded into the multicast stream itself, each multicast stream can use the same multicast address. Therefore, efficient and scalable utilization of multicast address allocation is possible. Furthermore, because each multicast stream can use the same multicast address, separate procedures involving different client devices 202a, 202b requesting to join separate multicast addresses do not need to be performed. Therefore, efficient and scalable communications can be provided.
[0067] In some embodiments, ID server 204 includes an authorization server (not shown) that stores the authorization of each client device 202 a, 202 b (or its user) to obtain data from particular data streams. In these embodiments, for each client device 202 a, 202 b (or its user), the authorization server stores client device information for client device 202 a, 202 b in association with one or more identifiers for each data stream or streams from which client device 202 a, 202 b (or its user) has authorization to obtain data. In these embodiments, the API of each client device 202 a, 202 b communicates with the authorization server over first network 210. Specifically, for each client device 202 a, 202 b, the API of client device 202 a, 202 b provides the client device information for client device 202 a, 202 b to the authorization server. The authorization server uses the provided client device information to determine one or more identifiers for each of the one or more data streams from which the client device 202a, 202b has permission to retrieve data. The authorization server provides the determined one or more identifiers to the API, which may store the one or more identifiers at the client device 202a, 202b. The API uses these stored identifiers to match (or not match) identifiers included in the multicast streams received by the client device 202a, 202b. This provides a way to centrally control the data streams from which each client device 202a, 202b may retrieve data via the server system 206.
[0068] VI. Variations
[0069] The system 200, its components, and component operation described above with reference to Figures 2 through 5 relate to an example embodiment. In other embodiments, variations on the above-described embodiment may be made.
[0070] For example, in the above-described embodiments, the ID server 204 generates an identifier associated with the connection information, provides the identifier to each client device 202a, 202b, and further provides the identifier and the connection information to the server system 206. However, it is understood that this is not necessarily the case, and other methods of providing identifiers may be used in other embodiments. For example, each received data stream may itself include an identifier, such as an identifier for the stream. For example, the identifier may encode or otherwise indicate the type of data or a particular combination of data within the data stream. Each client device 202a, 202b may also store such an identifier. For example, each client device 202a, 202b may store an identifier that indicates the type of data the client device acquires or the particular combination of data it is configured to use. In these examples, the server system 206 may determine an identifier for each of the multiple received data streams directly from each data stream. In such examples, the system 200 does not necessarily include the ID server 204.
[0071] As another example, in the above-described embodiments, multiple data streams are described as being received from the data source 208. However, it is understood that this is not necessarily the case, and that in other embodiments, multiple data streams may be received from multiple data sources (not shown). In these embodiments, the server system 206 may receive multiple data streams from two or more data sources. For example, each different data source may provide a respective different data stream to the server system 206. In such embodiments, the connection information provided by each client device 202a, 202b may be for establishing a connection with the respective different data source 208 from which the associated data stream is transmitted. Alternatively or additionally, in such embodiments, each data stream received by the server system 206 from a given data source may itself include an identifier for that data stream. For example, the identifier may indicate the data source from which the received data stream originated. The server system 206 may determine the identifier for each data stream as an identifier indicating the data source from which the received data stream originated. In such an embodiment, each client device 202a, 202b may store an identifier indicating the data source that provides the data stream that the client device uses or is configured to use.
[0072] As another example, in the above-described embodiments, multiple data streams are described as being received from the data source 208. However, it is understood that this is not necessarily the case, and that in other embodiments, a single data source 208 need not be used. For example, in some embodiments, components of the server system 206 may act as data sources and generate different data streams that are received by a processor of the server system 206. In these embodiments, the server system 206 may determine an identifier for each generated stream by assigning an identifier to each of the generated streams. For example, as described above, each identifier may encode or otherwise indicate a type of data or a particular combination of data within the data stream. In these embodiments, the system need not necessarily include another data source 208.
[0073] As another example, in the embodiments described above, data source 208 and ID server 204 are described as being separate from server system 206. That is, ID server 204 communicates with server system 206 via third network 214, and data source 208 communicates with server system 206 via a fourth network. However, it is understood that this is not necessarily the case, and that in other embodiments (not shown), data source 208 and / or ID server 204 may be part of or separately incorporated into server system 206. That is, in some embodiments, server system 206 may additionally provide the functionality of ID server 204 and / or data source 208 described above.
[0074] As another example, in some of the embodiments described above, there are two client devices 202a, 202b, each of which is described as being associated with a different data stream provided by data source 208, and each of which is described as storing a different identifier and retrieving data from a respective different multicast stream. However, this need not be the case, and in other embodiments, it is understood that there can be any number of client devices 202a, 202b, and that in some embodiments, two or more of client devices 202a, 202b can be associated with the same data stream provided by data source 208, store the same identifier, and retrieve the same data from the same multicast stream. For example, two or more of client devices 202a and 202b can each be used by the same user or act on behalf of the same user. These two or more client devices 202a, 202b can store the same identifier and retrieve the same data from the same multicast stream. In this case, for example, the third client devices 202a, 202b may store different identifiers and obtain data from different multicast streams, eg, as described above.
[0075] As another example, in the above-described embodiments, system 200 is described as including multiple client devices 202a, 202b. That is, in the above-described embodiments, multiple computing devices are described as each executing a respective client. However, it is understood that this is not necessarily the case, and that system 200 may generally include multiple clients operating on one or more computing devices. For example, each different client may operate on a respective different computing device (forming each different client device 202a, 202b). However, in other embodiments, each different client (i.e., an application or other piece of software) may execute on more than one computing device. For example, multiple different clients may operate on a single computing device, such as when the device is acting on behalf of multiple users. In either case, each client may be associated with a different data stream (e.g., provided by data source 208), and each client may store a different identifier and obtain data from a different multicast stream, as described above. Thus, the server system 206 may be configured to multicast data to multiple clients, each of which stores an identifier indicating the data stream associated with the client, as described above with respect to multiple client devices 202a, 202b. Accordingly, it is understood that references to "client devices 202a, 202b" in the embodiments described herein are to be interpreted as referring more generally to "clients 202a, 202b," which may operate on one or more computing devices. Other variations are possible.
[0076] VII. Exemplary Methods
[0077] Referring to FIG. 6, there is a flow diagram illustrating a method according to an embodiment. The method may be performed, for example, by a server system 206 according to any of the embodiments described above in connection with FIGS. 1 through 5. In an embodiment, the server system includes a processor (e.g., processor 112 of FIG. 1) and a memory (e.g., memory 114 of FIG. 1). The method may be performed by the processor. The processor may be configured to execute the method. The memory may store instructions that, when executed, cause at least one processor of the server system (e.g., processor 112 of FIG. 1) to perform the method or a function defined by the method. For example, the memory may store an application (e.g., application 130 of FIG. 1) including the instructions. The server system, e.g., its processor, may be configured to multicast data to multiple clients, e.g., client devices 202a, 202b, according to any of the embodiments described above in connection with FIGS. 1 through 5. Each of the multiple clients stores an identifier indicating a data stream associated with the client.
[0078] The method includes receiving a plurality of data streams, each data stream containing data, at step 602. For example, the plurality of data streams may be received over respective different connections with data source 208, as described above.
[0079] The method includes determining an identifier for each of a plurality of received data streams, at step 604. For example, for each received data stream, an identifier for the received data stream may be determined based on the connection over which the data stream is received, as described above.
[0080] The method includes, in step 606, transmitting to a plurality of clients a mapping between each identifier and a respective multicast stream.
[0081] The method includes, in step 608, multicasting data of the plurality of received data streams according to the mapping.
[0082] In a first embodiment, the mapping may include a mapping between each identifier and a different multicast address for each of the multicast streams. In this first embodiment, sending the mapping to the plurality of clients may include broadcasting the mapping over a network to which each of the plurality of clients is connected. In this first embodiment, multicasting data for the plurality of received data streams according to the mapping includes, for each received data stream, multicasting the data for the received data stream using the multicast address mapped to the identifier determined for the data stream.
[0083] In a second embodiment, transmitting the mapping to the plurality of clients and multicasting data of the plurality of received data streams according to the mapping includes, for each of the received data streams, generating a multicast stream including an identifier for the received data stream and data of the received data stream, thereby encoding the mapping into each multicast stream, and multicasting each of the generated multicast streams to the plurality of clients. In this second embodiment, each of the generated multicast streams may include one or more multicast packets, each including a header and a payload. And, for each of the generated multicast streams, generating a multicast stream including an identifier includes including an identifier for the received data stream in a header of a packet of the multicast stream and including data of the received data stream in a payload of a packet of the multicast stream.
[0084] Referring to FIG. 7, there is a flow diagram illustrating a method according to another embodiment. The method may be performed by a client system, for example, by each of one or more client devices 202a, 202b, or generally by a computer system executing one or more clients according to any of the embodiments described in connection with FIGS. 1-5. In an embodiment, each client is implemented by a client system including a processor (e.g., processor 112 of FIG. 1) and memory (e.g., memory 114 of FIG. 1). The method may be performed by the processor. The processor may be configured to execute the method. The memory 114 may store instructions that, when executed, cause at least one processor of the client system (e.g., processor 112 of FIG. 1) to perform the method or a function defined by the method. The memory of the client system stores an identifier indicating a data stream associated with the client system. For example, the data stream may be one of the data streams received by the server system 206 described in connection with FIGS. 1-5 above.
[0085] The method includes, in step 702, receiving a mapping between a plurality of identifiers and a respective plurality of multicast streams from a server system (e.g., server system 206 according to any of the embodiments described above in connection with Figures 1 to 5).
[0086] The method includes, in step 704, matching the stored identifier with an identifier in the mapping.
[0087] The method includes, in step 706, obtaining data of the multicast stream that is mapped to the matched identifier.
[0088] In a first embodiment, the mapping includes a mapping between a plurality of identifiers and a respective plurality of different multicast addresses, and obtaining data of the multicast stream mapped to a matching identifier in the mapping includes configuring a communication interface of the client system (e.g., network interface 116 of FIG. 1) to receive data transmitted at a destination address corresponding to the multicast address mapped to the matching identifier in the mapping.
[0089] In a second embodiment, the mapping is provided by including each identifier in a respective different one of the plurality of multicast streams, and receiving the mapping includes receiving the plurality of multicast streams. In this second embodiment, obtaining data of the multicast streams that are mapped to matching identifiers in the mapping includes obtaining data of the multicast streams of the received plurality of multicast streams that include identifiers that match the stored identifiers.
[0090] Referring to FIG. 8, there is a flow diagram illustrating a method according to an embodiment. The method may be performed by a server system, for example, by the server system 206 according to any of the embodiments described above in connection with FIGS. 1-5. In an embodiment, the server system includes a processor (e.g., processor 112 of FIG. 1) and a memory (e.g., memory 114 of FIG. 1). The method may be performed by the processor. The processor may be configured to execute the method. The memory may store instructions that, when executed, cause at least one processor of the server system (e.g., processor 112 of FIG. 1) to perform the method or a function defined by the method. For example, the memory may store an application (e.g., application 130 of FIG. 1) including the instructions. The server system, for example, its processor, is configured to multicast data to multiple clients, for example, to client devices 202a, 202b, or more generally, to clients according to any of the embodiments described above in connection with FIGS. 1-5. Each of the multiple clients stores an identifier indicating a data stream associated with the client.
[0091] The method includes receiving a plurality of data streams, each data stream containing data, at step 802. For example, the plurality of data streams may be received over different connections with the data source 208, as described above.
[0092] The method includes determining an identifier for each of a plurality of received data streams, at step 804. For example, for each received data stream, an identifier for the received data stream may be determined based on the connection over which the data stream is received, as described above.
[0093] The method includes, in step 806, generating a mapping between each identifier and each different multicast address.
[0094] The method includes, in step 808, broadcasting the mapping to a plurality of clients.
[0095] The method includes, in step 810, for each received data stream, multicasting data of the received data stream using a multicast address mapped to the identifier determined for the received data stream.
[0096] Referring to FIG. 9, there is a flow diagram illustrating a method according to an embodiment. The method may be performed by a server system, for example, by the server system 206 according to any of the embodiments described above in connection with FIGS. 1-5. In an embodiment, the server system includes a processor (e.g., processor 112 of FIG. 1) and a memory (e.g., memory 114 of FIG. 1). The method may be performed by the processor. The processor may be configured to execute the method. The memory may store instructions that, when executed, cause at least one processor of the server system (e.g., processor 112 of FIG. 1) to perform the method or a function defined by the method. For example, the memory may store an application (e.g., application 130 of FIG. 1) including the instructions. The server system, e.g., its processor, is configured to multicast data to multiple clients, e.g., client devices 202a, 202b, or more generally, clients according to any of the embodiments described above in connection with FIGS. 1-5. Each of the multiple clients stores an identifier indicating a data stream associated with the client.
[0097] The method includes receiving a plurality of data streams, each data stream including data, at step 902. For example, the plurality of data streams may be received over respective different connections with data source 208, as described above.
[0098] The method includes determining an identifier for each of a plurality of received data streams, at step 904. For example, for each received data stream, an identifier for the received data stream may be determined based on the connection over which the data stream is received, as described above.
[0099] The method includes, for each received data stream, generating a multicast stream including an identifier for the received data stream and data of the received data stream at step 906. For example, each generated multicast stream may include one or more multicast packets including a header and a payload, and generating the multicast stream including an identifier for each generated multicast stream may include including the identifier for the received data stream in a header of a packet of the multicast stream and including the data of the received data stream in a payload of a packet of the multicast stream.
[0100] The method includes, in step 908, multicasting the generated multicast stream to a plurality of clients.
[0101] VIII. Illustrative Electronic Trading System
[0102] FIG. 10 shows a block diagram depicting an example electronic trading system 1000 in which certain embodiments may be employed. The system 1000 includes a trading device 1010, a gateway 1020, and an exchange 1030. The trading device 1010 communicates with the gateway 1020. The gateway 1020 communicates with the exchange 1030. As used in this disclosure, the term "communicate" encompasses direct communication and / or indirect communication via one or more intermediary components. The trading device 1010, the gateway 1020, and / or the exchange 1030 may include one or more computing devices 100 of FIG. 1. The example electronic trading system 1000 shown in FIG. 10 may communicate with additional components, subsystems, and elements that provide additional functionality and capabilities without departing from the teachings and teachings presented in this disclosure.
[0103] During operation, the trading device 1010 may receive market data from the exchange 1030 via the gateway 1020. The trading device 1010 may send messages to the exchange 1030 via the gateway 1020. A user may utilize the trading device 1010 to monitor market data and make decisions to send order messages to buy or sell one or more tradable objects to the exchange 1030. The trading device 1010 may use the market data to perform trading actions, such as sending order messages to the exchange 1030. For example, the trading device may execute an algorithm that uses the market data as input and outputs a trading action, such as sending an order message to the exchange 1030. The algorithm may or may not require input from a user to perform a trading action.
[0104] Market data may include data about the market for a tradable object. For example, market data may include the inside market, market depth, last traded price ("LTP"), last traded quantity ("LTQ"), or a combination of these. The inside market refers to the highest bid (best bid) and lowest ask (best ask or best offer) prices in the market for a tradable object at a particular time (as the inside market may change over time). Market depth refers to the quantity available at price levels including and beyond the inside market. There may be "gaps" in the market depth due to prices with no quantity based on orders in the market.
[0105] Price levels associated with the inside market and market depth may be provided as value levels that include not only the price itself but also derived and / or calculated representations. For example, a value level may be displayed as the net change from the opening price. As another example, a value level may be presented as a value calculated from the prices of two other markets. As another example, a value level may include an integrated price level.
[0106] A tradable object is anything that can be traded. For example, a certain amount of a tradable object can be bought or sold at a particular price. Tradable objects may include, for example, financial instruments, stocks, options, bonds, futures contracts, currencies, warrants, fund-related derivatives, securities, commodities, swaps, interest rate-related products, index-linked products, traded events, goods, or combinations thereof. Tradable objects may include instruments listed and / or managed by an exchange, instruments defined by a user, a combination of real or synthetic instruments, or any combination thereof. Synthetic tradable objects may exist that correspond to and / or are similar to real tradable objects.
[0107] An order message is a message that includes a trade order, which may be, for example, a command to place an order to buy or sell a tradable object, a command to initiate management of an order according to a defined trading strategy, a command to change, modify, or cancel an order, instructions to an electronic exchange related to the order, or a combination thereof.
[0108] The trading device 1010 may include one or more electronic computing platforms. For example, the trading device 1010 may include a desktop computer, a handheld device, a laptop, a server, a portable computing device, a trading terminal, an embedded trading system, a workstation, an algorithmic trading system such as a "black box" or "gray box" system, a computer cluster, or a combination thereof. As another example, the trading device 1010 may include a single or multi-core processor in communication with memory or other storage media configured to accessibly store one or more computer programs, applications, libraries, computer-readable instructions, etc., for execution by the processor.
[0109] By way of example, trading device 1010 may include a computing device, such as a personal computer or mobile device, in communication with one or more servers, where the computing device and one or more servers together constitute trading device 1010. For example, trading device 1010 may be a computing device and one or more servers that jointly execute the TT® Platform, an electronic trading platform offered by Trading Technologies International, Inc. (hereinafter, "Trading Technologies") of Chicago, Illinois. For example, one or more servers may execute a portion of the TT Platform, such as a portion that provides a web server, and a computing device may execute another portion of the TT Platform, such as a portion that provides user interface functionality on a web browser. The computing device and server may communicate with each other to implement the TT Platform, for example, using browser session requests and responses or web sockets. As another example, trading device 1010 may include a computing device, such as a personal computer or mobile device, that executes an application, such as TT® Desktop or TT® Mobile, both of which are electronic trading applications offered by Trading Technologies. As another example, trading device 1010 may be one or more servers running trading tools such as ADL®, AUTOSPREADER®, AUTOTRADER®, and / or MD TRADER®, also provided by Trading Technologies.
[0110] Trading device 1010 is controlled or otherwise used by a user. As used in this disclosure, the term "user" may include, but is not limited to, a human being (e.g., a trader), a trading group (e.g., a group of traders), or an electronic trading device (e.g., an algorithmic trading system). One or more users may be involved in controlling or otherwise using a trading device.
[0111] The trading device 1010 may include one or more trading applications. As used in this disclosure, a trading application is an application that facilitates or enhances electronic trading. A trading application provides one or more electronic trading tools. For example, a stored trading application may be executed by the trading device to arrange and display market data in one or more trading windows. In another example, a trading application may include an automated spread trading application that provides spread trading tools. In yet another example, a trading application may include an algorithmic trading application that automatically processes algorithms and performs specific actions, such as placing orders, modifying existing orders, or deleting orders. In yet another example, a trading application may provide one or more trading screens. A trading screen may provide one or more trading tools that enable interaction with one or more markets. For example, trading tools may enable a user to obtain and display market data, set order entry parameters, send order messages to an exchange, deploy trading algorithms, and / or monitor positions while implementing various trading strategies. The electronic trading tools provided by a trading application may be available all the time, or may be available only in a particular configuration or mode of operation of the trading application.
[0112] The trading application may be implemented using computer-readable instructions stored on a computer-readable medium and executable by a processor. The computer-readable medium may include various types of volatile and non-volatile storage media, such as, for example, random access memory, read-only memory, programmable read-only memory, electrically programmable read-only memory, electrically erasable read-only memory, flash memory, any combination thereof, or other tangible data storage devices. As used in this disclosure, the terms "non-transitory" or "tangible" computer-readable medium are expressly defined to include all types of computer-readable storage media and to exclude propagating signals.
[0113] One or more components or modules of the trading application may be loaded into the computer-readable medium of the trading device 1010 from another computer-readable medium. For example, the trading application (or an update to the trading application) may be stored on one or more CDs, DVDs, or USB drives by a manufacturer, developer, or publisher and then loaded onto the trading device 1010, or loaded onto a server from which the trading device 1010 retrieves the trading application. As another example, the trading device 1010 may receive the trading application (or an update to the trading application) from a server, e.g., via the Internet or an internal network. The trading device 1010 may receive the trading application or update when requested by the trading device 1010 (e.g., "pull delivery") and / or when not requested by the trading device 1010 (e.g., "push delivery").
[0114] The trading device 1010 may be adapted to send order messages. For example, the order messages may be sent to the exchange 1030 via the gateway 1020. As another example, the trading device 1010 may be adapted to send order messages to a simulated exchange in a simulated environment that does not implement real-world transactions.
[0115] The order message may be transmitted at the request of a user. For example, a trader may utilize the trading device 1010 to transmit the order message or may manually enter one or more parameters for a trade order (e.g., order price and / or quantity). As another example, an automated trading tool provided by a trading application may calculate one or more parameters of a trade order and automatically transmit the order message. In some cases, the automated trading tool may prepare the order message to be transmitted but not actually transmit it without confirmation from the user.
[0116] The order message may be transmitted in one or more data packets or via a shared memory system. For example, the order message may be transmitted from the trading device 1010 to the exchange 1030 via the gateway 1020. The trading device 1010 may communicate with the gateway 1020 using a local area network, a wide area network, a multicast network, a wireless network, a virtual private network, an internal network, a cellular network, a peer-to-peer network, a point of presence, a dedicated line, the Internet, a shared memory system, and / or a proprietary network.
[0117] Gateway 1020 may include one or more electronic computing platforms. For example, gateway 1020 may be implemented as one or more desktop computers, handheld devices, laptops, servers, portable computing devices, trading terminals, embedded trading systems, workstations with single or multi-core processors, algorithmic trading systems such as "black box" or "gray box" systems, computer clusters, or any combination thereof.
[0118] The gateway 1020 facilitates communications. For example, the gateway 1020 may perform protocol conversion for data communicated between the trading device 1010 and the exchange 1030. The gateway 1020 may, for example, process order messages received from the trading device 1010 into a data format understandable by the exchange 1030. Similarly, the gateway 1020 may transform market data received from, for example, the exchange 1030 in an exchange-specific format into a format understandable by the trading device 1010. As described in more detail below with reference to FIG. 11 , in some examples, the gateway 1020 may communicate with cloud services that may support the functionality of the gateway 1020 and / or the trading device 1010.
[0119] The gateway 1020 may include trading applications similar to those described above that facilitate or improve electronic trading. For example, the gateway 1020 may include a trading application that tracks orders from the trading devices 1010 and updates the status of the orders based on fill confirmations received from the exchange 1030. As another example, the gateway 1020 may include a trading application that aggregates market data from the exchange 1030 and provides it to the trading device 1010. In yet another example, the gateway 1020 may include a trading application that provides risk processing, calculates implieds, handles order processing, handles market data processing, or any combination thereof.
[0120] In particular embodiments, the gateway 1020 communicates with the exchange 1030 using a local area network, a wide area network, a multicast network, a wireless network, a virtual private network, an internal network, a cellular network, a peer-to-peer network, a point of presence, a dedicated line, the Internet, a shared memory system, and / or a proprietary network.
[0121] The exchange 1030 may be owned, operated, controlled, or used by an exchange entity. Exemplary exchange entities include CME Group, Chicago Board Options Exchange, Intercontinental Exchange, and Singapore Exchange. The exchange 1030 may be an electronic exchange including an electronic matching system, such as a computer, server, or other computing device, adapted to, for example, facilitate the buying and selling of tradable objects offered for trading by the exchange. The exchange 1030 may include, for example, an entity that lists and / or manages tradable objects and a separate entity that receives and matches orders. The exchange 1030 may include, for example, an electronic communications network ("ECN").
[0122] The exchange 1030 is adapted to receive order messages and match bilateral trade orders to buy or sell tradeable objects. Unmatched trade orders may be posted by the exchange 1030 as trade objects. Once an order to buy or sell a tradeable object is received and confirmed by the exchange, the order is considered a working order until it is executed or canceled. If only a portion of the order quantity is matched, the partially executed order remains a working order. Trade orders may include, for example, trade orders received from the trading device 1010 or other devices in communication with the exchange 1030. For example, the exchange 1030 typically communicates with a variety of other trading devices (which may be similar to the trading device 1010) that provide trade orders to be matched.
[0123] The exchange 1030 is adapted to provide market data. The market data may be provided in one or more messages or data packets, or via a shared memory system. For example, the exchange 1030 may publish a data feed to subscribing devices, such as trading devices 1010 and gateways 1020. The data feed may include market data.
[0124] System 1000 may include additional, different, or fewer components. For example, system 1000 may include multiple trading devices, gateways, and / or exchanges. In another example, system 1000 may include other communication devices, such as middleware, firewalls, hubs, switches, routers, servers, exchange-specific communication equipment, modems, security managers, and / or encryption / decryption devices.
[0125] In an embodiment, trading device 1010 may be provided by client device 202a, 202b according to any of the embodiments described above in connection with FIGS. 1-9. For example, trading device 1010 may be configured to provide the same or similar functionality as client device 202a, 202b according to any of the embodiments described above in connection with FIGS. 1-9. Gateway 1020 may be provided by or include server system 206 according to any of the embodiments described above in connection with FIGS. 1-9. For example, gateway 1020 may be configured to provide the same or similar functionality as server system 206 according to any of the embodiments described above in connection with FIGS. 1-9. For example, gateway 1020 may multicast data to trading device 1010 (and multiple other trading devices not shown in FIG. 10). For example, gateway 1020 may obtain market data from exchange 1030 and multicast this data to trading device 1010.
[0126] In some embodiments, the gateway 1020 may receive multiple data streams. The gateway 1020 may multicast data from the received multiple data streams to trading devices 1010 according to a mapping, such as described above for server system 206 in connection with FIGS. 1-9. For example, the gateway 1020 may convert the data from the data streams into a format understandable by the trading devices 1010. The multiple streams may be received from a data source (not shown in FIG. 10), such as data source 208 according to any of the embodiments described above in connection with FIGS. 1-9. In some embodiments, the data source 208 may exist separate from, e.g., in addition to, the exchange 1030. In these embodiments, the data source 208 may represent a server or other computing device that provides data to the gateway 1020 in addition to market data provided by the exchange 1030. For example, the data source 208 may provide price data provided by a liquidity provider. For example, different liquidity providers may offer different prices for liquidity. In these embodiments, the multiple different data streams may include price data provided by different liquidity providers or by different combinations of liquidity providers. By multicasting the same market data from the exchange 1030 to all trading devices 1010, and also by multicasting multiple different incoming streams of data so that different trading devices can obtain different data (as described above with reference to FIGS. 1-9), the gateway 1020 can provide efficient, scalable, and adaptable messaging. In embodiments, the trading devices 1010 can use data from the associated data streams from the data sources 208 to inform trading decisions. For example, trading decisions may be implemented as order messages sent to the exchange 1030 via the gateway 1020, e.g., as described above.
[0127] IX. Examples of Electronic Trading Systems
[0128] FIG. 11 shows a block diagram illustrating an example electronic trading system 1100 in which certain embodiments may be employed. Electronic trading system 1100 includes trading device 1110, hybrid cloud system 1120, and exchange 1130. Trading device 1110 may be the same as or similar to trading device 1010 described above with reference to FIG. 10. Exchange 1130 may be the same as or similar to exchange 1030 described above with reference to FIG. 10. Hybrid cloud system 1120, or one or more components thereof, may provide one or more functions of gateway 1020 described above with reference to FIG. 10. That is, the functionality of gateway 1020 described above with reference to FIG. 10, or one or more portions of its functionality, may be included within hybrid cloud system 1120.
[0129] Hybrid cloud system 1120 includes cloud service 1140 and data center 1160. In the example shown in FIG. 11 , cloud service 1140 and its components are separate from data center 1160. However, in other examples (not shown), one or more or all of the components and / or functionality of cloud service 1140 may instead be implemented in data center 1160. In such examples, or in other cases, electronic trading system 1100 may not include cloud service 1140. In such examples, one or more functions of gateway 1020 described above with reference to FIG. 10 may be provided solely by data center 1160, or one or more components thereof.
[0130] To maintain low latency for time-sensitive processing, data center 1160 may be co-located with exchange 1130 or located near exchange 1130. Thus, functions of hybrid cloud system 1120 that are time-sensitive or that benefit from low latency with exchange 1130 may be performed by data center 1160. In general, functions of hybrid cloud system 1120 that are not time-sensitive or that do not benefit from low latency with exchange 1130 may be performed by cloud services 1140. Hybrid cloud system 1120 allows for scalability of electronic trading system 1100 for non-time-sensitive functions while also achieving relatively low latency with exchange 1130.
[0131] In the example of FIG. 11 , trading device 1110 communicates with cloud service 1140 via a first network 1171. For example, first network 1171 may be a wide area network such as the Internet using a Hypertext Transfer Protocol (HTTP) connection. Trading device 1110 communicates with data center 1160 via a second network 1172. For example, trading device 1110 may communicate with data center 1160 via a virtual private network or using a secure WebSocket or TCP connection. First network 1171 and second network 1172 may be the same network. Data center 1160 communicates with cloud service 1140 via a third network 1173. For example, data center 1160 may communicate with cloud service 1140 via a private network or a virtual private network (VPN) tunnel. Third network 1173 may be the same as first network 1171 and / or second network 1172. The data center 1160 communicates with the exchange 1130 via a fourth network 1174. For example, the data center 1160 may communicate with the exchange 1130 using a local area network, a wide area network, a multicast network, a wireless network, a virtual private network, an internal network, a cellular network, a peer-to-peer network, a point of presence, a dedicated line, the Internet, a shared memory system, and / or a proprietary network. The fourth network 1174 may be the same as the first network 1171, the second network 1172, and / or the third network 1173.
[0132] Cloud services 1140 may be implemented as a virtual private cloud, which may be provided by logically isolated sections of the overall web services cloud. In this example, cloud services 1140 includes web database 1141 and associated web server 1142, product database 1143 and associated product data server (PDS) 1144, user setup database 1145 and associated user setup server 1146, and transaction database 1147 and associated transaction server 1148.
[0133] The trading device 1110 may communicate with a web server 1142. As one example, the trading device 1110 may execute a web browser, referred to herein as a browser, and establish a browsing session with the web server 1142. This may occur after proper domain name resolution to the IP address of the cloud service 1140 and / or proper authentication of the trading device 1110 (or its user) by the cloud service 1140. The browser sends requests to the web server 1142, which returns responses to the browser using, for example, Hypertext Transfer Protocol (HTTP) or Secure Hypertext Transfer Protocol (HTTPS) protocols. The web server 1142 provides a user interface to the browser through which a user can interact with the electronic trading platform. This user interface may enable the display of market data and / or the submission of trade orders. As another example, the trading device 1110 may execute an application that communicates with the web server 1142, such as via an application programming interface (API), to enable a user to interact with the electronic trading platform. This application may provide a user interface through which a user can interact with the electronic trading platform.
[0134] The trading device 1110 may communicate with the PDS 1144. The PDS 1144 interfaces with a product database 1143. The product database 1143 stores definitions of financial instruments and user permissions for financial instruments. Specifically, the product database 1143 stores definitions of tradable objects and user permissions for placing trade orders for the tradable objects. This information may be provided to the trading device 1110. This information may be used by the user interface of the trading device 1110 to determine which tradable objects a given user of the trading device 1110 may place trade orders for.
[0135] The trading device 1110 may communicate with a user setup server 1146. The user setup server 1146 interfaces with a user setup database 1145. The user setup database 1145 stores user settings, preferences, and other information associated with a user's account. This information may be provided by the trading device 1110 to the user setup server 1146 upon user registration or at some point thereafter, and the user setup server 1146 may store this information in the user setup database 1145. This information may be provided to the trading device 1110. This information may be used by the user interface of the trading device 1110 to determine what market data to display and in what format.
[0136] Transaction database 1147 stores information about transactions conducted using electronic trading system 1100. Transaction database 1147 may store all of the trade orders submitted by users and all of the corresponding order execution reports provided by exchange 1130 upon execution of the trade orders. Transaction server 1148 may query transaction database 1147 and generate, for example, an audit trail 1149 for a given user. This audit trail 1149 may be provided to trading device 1110 (or other device) so that the trading activity of a given user can be reviewed and / or analyzed.
[0137] Data center 1160 includes a multicast bus 1161, a price server 1162, an edge server 1163, a risk server 1164, a ledger uploader server 1165, an order connector 1166, and a strategy engine server 1167. The various components within data center 1160 communicate with each other using multicast bus 1161. This allows for efficient and scalable communication between components within data center 1160. For example, information provided by one of the components may be received by multiple other components. By sending this information on the multicast bus 1161 to which the other components subscribe, the information can be sent in a single message regardless of the number of receiving components.
[0138] The price server 1162 receives market data from the exchange 1130. The price server 1162 converts this information into a format and / or syntax associated with (e.g., used by) the electronic trading system 1100. The price server 1162 transmits the converted information as one or more multicast messages on the multicast bus 1161. Specifically, the price server 1162 multicasts this information to a first multicast bus A, where it is received by the price clients. The edge server 1163 and the strategy engine server 1167 subscribe to the first multicast bus A and receive market data from the price server 1162. The price server 1162 may communicate with the cloud service 1140. For example, the price server 1162 may provide information about products or tradable objects to the PDS server 1144, which may use the information in defining the tradable objects.
[0139] The edge server 1163 communicates with the trading devices 1110. For example, the trading devices 1110 may communicate with the edge server 1163 via a secure WebSocket or TCP connection. In some examples, the edge server 1163 may be implemented as a server cluster. The number of servers in the cluster may be determined and expanded as needed based on utilization. The edge server 1163 receives market data via a first multicast bus A and routes the market data to the trading devices 1110. A user of the trading device 1110 may decide to place a trade order based on the market data. The edge server 1163 routes the trade order from the trading device 1110 to the exchange 1130. Specifically, when the edge server 1163 receives an order message from the trading device 1110, it multicasts the order message (or at least a portion of its contents) to a second multicast bus B for receipt by the order client. The risk server 1164 subscribes to the second multicast bus B and receives order messages from the edge server 1163 .
[0140] The risk server 1164 is used to determine the pre-trade risk for a given trade order contained in a given order message. For example, for a given trade order, the risk server 1164 may determine whether the user submitting the trade order is authorized to submit the trade order. The risk server 1164 may determine whether the user is authorized to trade the quantity of the tradable object specified in the trade order. The risk server 1164 may prevent the submission of fraudulent trade orders. The risk server 1164 receives order messages from the edge server 1163 via the second multicast bus B and processes the order messages to determine the risk for the trade order in the message. If the risk server 1164 determines that the trade order should not be submitted (e.g., if the risk associated with the trade order exceeds a threshold), the risk server 1164 prevents the submission of the trade order. For example, in this case, the risk server 1164 does not send the order message to the order connector 1166 but instead sends a message to the user indicating that the trade order was not submitted. If the risk server 1164 determines that the trade order should be submitted (e.g., if the risk associated with the trade order is below a threshold), the risk server 1164 forwards the order message to the order connector 1166. Specifically, the risk server 1164 multicasts the order message to a second multicast bus B. The order connector 1166 and the ledger uploader 1165 subscribe to the second multicast bus B and receive the order message from the risk server 1164.
[0141] The ledger uploader server 1165 is in communication with the transaction database 1147 of the cloud service 1140. The ledger uploader server 1165 receives order messages from the risk server 1164 and sends the order messages to the transaction database 1147. The transaction database 1147 then stores the order messages (or at least a portion of their contents) in a ledger stored in the transaction database 1147.
[0142] The order connector 1166 communicates with the exchange 1130. The order connector 1166 receives order messages from the risk server 1164, processes the order messages for transmission to the exchange 1130, and transmits the processed order messages to the exchange 1130. Specifically, this processing includes processing the order messages into a data format understandable by the exchange 1130. If the trade order in the order message is executed by the exchange 1130, the exchange 1130 sends a corresponding execution report message to the order connector 1166. The execution report message includes an execution report that details the execution of the trade order. The order connector 1166 processes the execution report message. Specifically, this processing includes processing the execution report message into a data format understandable by the electronic trading system and trading device 1110. The order connector 1166 multicasts the processed execution report message to a third multicast bus C for reception by execution report clients. The edge server 1163 and the ledger uploader 1165 subscribe to the third multicast bus C to receive the processed execution report message. The ledger uploader 1165 communicates with the transaction database 1147 and updates the ledger with the execution report message (or at least a portion of its contents). The edge server 1163 forwards the execution report message to the trading device 1110. Based on the execution report message, the trading device 1110 may display information indicating that the trade order has been executed.
[0143] In some embodiments, the order message may be sent by a strategy engine server 1167. For example, the strategy engine server 1167 may implement one or more strategy engines using an algorithmic strategy engine and / or an autospreader strategy engine. The strategy engine 1167 may receive market data (from the price server 1162 via the first multicast bus A) and automatically generate order messages based on the market data and appropriately configured algorithms. The strategy engine server 1167 may send the order message to the order connector 1166 (via the risk server 1164 and the second multicast bus B), which processes the order message in the same manner as described above. Similarly, when the exchange 1130 fills an order, the strategy engine 1167 may receive a corresponding order fill report message from the order connector 1166 (via the third multicast bus C). The order message and the fill report message may be sent to the ledger uploader 1165 in the same manner as described above, which may update the ledger stored in the transaction database 1147.
[0144] In some embodiments, trade orders sent by the trading device 1110 may not be placed by a human. For example, the trading device 1110 may be a computing device implementing an algorithmic trading application. In these examples, the trading device 1110 may not communicate with the web server 1142, the PDS 1144, and / or the user setup server 1146 and may not utilize a browser or user interface to place trades. An application executing on the trading device 1110 may communicate with an adapter associated with the edge server 1163. For example, the application and the adapter may communicate with each other using Financial Information Exchange (FIX) messages. In these examples, the adapter may be a FIX adapter. An application executing on the trading device 1110 may receive market data in FIX format (the market data is provided by the price server 1162 and converted to FIX format by the FIX adapter associated with the edge server 1163). Applications executing on trading devices 1110 may generate trade orders based on the received market data and send order messages in FIX format to a FIX adapter associated with edge server 1163. The FIX adapter associated with edge server 1163 may process the order messages received in FIX format into a format understandable by components of data center 1160.
[0145] It should be noted that electronic trading system 1100 is merely an example, and other electronic trading systems may be used. As one example, electronic trading system 1100 need not necessarily include cloud service 1140. As another example, data center 1160 may include more or fewer components than those described above with reference to FIG. 11. As another example, forms of messaging between components of data center 1160 other than multicast messaging may be used.
[0146] In an embodiment, price server 1162 may be provided by or may include server system 206 of any of the embodiments described above in connection with Figures 1-9. For example, price server 1162 may be configured to provide the same or similar functionality as server system 206 of any of the embodiments described above in connection with Figures 1-9. Thus, server system 206 of any of the embodiments described above in connection with Figures 1-9 may implement price server 1162 of example electronic trading system 1100. Second network 212 of the embodiments described above in connection with Figures 1-9 may be provided by multicast bus 1161 of data center 1160 of electronic trading system 1100.
[0147] In some embodiments, price server 1162 may receive multiple data streams. The multiple data streams may be received from a data source (not shown in FIG. 11 , but e.g., data source 208 according to any of the embodiments described above in connection with FIGS. 1-9 ). In some embodiments, data source 208 may exist separately from, e.g., in addition to, exchange 1130. In these embodiments, data source 208 may represent a server or other computing device that provides data to price server 1162 in addition to market data provided by exchange 1130. For example, data source 208 may provide price data provided by liquidity providers. For example, different liquidity providers may provide different prices for liquidity. In these embodiments, the multiple different data streams may include price data provided by different liquidity providers or by different combinations of liquidity providers. Price server 1162 may translate and / or convert data from multiple different data streams and then multicast this data over multicast bus 1161. For example, data sources 208 may provide data streams using the FIX protocol, while price server 1162 may multicast data using a proprietary protocol. Thus, price server 1162 may be configured to translate the multiple data streams it receives from a format understood and used by data sources 208 to a format understood and used by price clients of data center 1160.
[0148] In an embodiment, one or more components of data center 1160 may be provided by client devices 202a, 202b, or generally by a client according to any of the embodiments described above in connection with Figures 1-9. Thus, in an embodiment, one or more components of data center 1160 may be a price client of price server 1162.
[0149] As an example, reference "1163" in FIG. 11 generally refers to a computing device or system (such as computing device 100 of FIG. 1) configured with software that enables computing device 1163 to function as an edge server (as described above) and that enables computing device 1163 to function as a price client. For example, computing device 1163 may execute a client according to any of the embodiments described above in connection with FIGS. 1 through 9. For example, the client may be associated with trading device 1100 (or its user). For example, when trading device 1100 connects to computing device 1163, computing device 1163 may establish a client on behalf of the trading device (or its user). The client may store an identifier that indicates a data stream from data source 208. This data stream is associated with that client, e.g., associated with trading device 1100 (or its user), e.g., associated with trading device 1100 (or its user), e.g., associated with trading device 1100 (or its user) on behalf of which the client is established. Price server 1162 can multicast data to clients executing on computing devices 1163 using multicast bus 1161 described above. Price server 1162 may multicast data (or a transformed version thereof) of the data stream received from data source 208 to clients executing on computing devices 1163 according to a mapping, for example, as described above for server system 206 in connection with Figures 1-9. Clients executing on computing devices 1163 may match a stored identifier with an identifier in the mapping and obtain the data of the multicast stream mapped to the matching identifier in the mapping, as described above in connection with Figures 1-9.Thus, a client running on computing device 1163 may obtain data from a data stream associated with the client. For example, if the client is established on behalf of trading device 1100 (or its user), it will obtain data from a data stream associated with trading device 1100. Thus, trading device 1163 may act as a price client of price server 1162.
[0150] The computing device 1163 may provide data obtained by a client on behalf of the trading device 1100 to the trading device 1100. For example, the computing device 1163 may execute software that provides edge server functionality for the trading device 1100. For example, this server software may obtain data from a client running on the computing device 1163. The server software running on the computing device 1163 may perform protocol conversion on the multicast stream data received from the client to convert it into a format understood by the trading device 1100. The server software running on the computing device 1163 may send the (converted) data to the trading device 1100 on whose behalf the client established the data via a connection to the trading device 1100. For example, this may be sent over the second network 1172, e.g., via a TCP, WebSocket, or FIX connection. The trading device 1100 may use the data to inform trading decisions. For example, a trade decision may be implemented as an order message transmitted to exchange 1130 via data center 1160, e.g., as described above. For example, the order message may be transmitted to server software running on computing device 1163, which may protocol-convert the order message to a format understood by data center 1160 and transmit the (converted) order message on multicast bus 1161, e.g., as described above. Computing device 1163 may thus function as an edge server for trading device 1100. In an embodiment, server software running on computing device 1163 may provide a front-end application for trading device 1100. The front-end application may provide data (e.g., price data) to trading device 1100 and may receive data (e.g., trade orders) from trading device 1100 (or its users).
[0151] In an embodiment, computing device 1163 (or one or more of a cluster of computing devices 1163) may execute multiple clients. For example, each client may be associated with a respective one of (or a user of) multiple trading devices 1100. Each client of computing device 1163 may be configured to provide the same or similar functionality as clients 202a, 202b according to any of the embodiments described above in connection with FIGS. 1-9. Price server 1162 may multicast data to clients operating on computing device 1163 using multicast bus 1161 described above. Price server 1162 may multicast data (or transformed versions thereof) of multiple data streams received from data source 208 to clients operating on computing device 1163 according to a mapping, e.g., as described above for server system 206 in connection with FIGS. 1-9. For each client, the computing device 1163 (or, more specifically, the server software running thereon) may obtain data from the client, convert the data into a format understood by the trading device 1100 with which the client is associated, and transmit the (converted) data to the trading device 1100 with which the client is associated via a respective connection (e.g., a TCP, WebSocket, or FIX connection) with the trading device 1100. By multicasting data for multiple different received data streams (as described above in connection with Figures 1 through 9), allowing different clients running on the computing device 1163 to obtain different data, the price server 1162 may provide efficient, scalable, and adaptive messaging.
[0152] As another example, strategy engine 1167 may be configured to provide the same or similar functionality as client devices 202a, 202b, or more generally, as a client according to any of the embodiments described above in connection with FIGS. 1-9. For example, strategy engine 1167 may include a client described above in connection with FIGS. 1-9. In an embodiment, data center 1160 may include multiple strategy engines 1167 (not shown in FIG. 11), each associated with, for example, a different user account. Price server 1162 may multicast data to clients of strategy engine 1167 using multicast bus 1161 described above. Price server 1162 may multicast data (or transformed versions thereof) of the multiple data streams received from data source 208 to clients of strategy engine 1167 according to the mapping. For example, this may be done as described above for server system 206 in connection with FIGS. 1-9. By multicasting data from multiple different incoming data streams (as described above in connection with FIGS. 1 through 9 ), clients of different strategy engines 1167 can obtain different data, thereby allowing price server 1162 to provide efficient, scalable, and adaptive messaging. In embodiments, for each strategy engine 1167, clients associated with that strategy engine 1167 can provide the obtained data to the strategy engine 1167. The strategy engine 1167 can then use data from the associated data stream from data source 208 to inform trading decisions. For example, trading decisions can be implemented as order messages sent to the exchange 1130 via order connector 1166, e.g., as described above.
[0153] Other components of data center 1160, such as other back-end applications (not shown) that may need to obtain data for a particular data stream (e.g., because they are associated with a particular user application), may be configured to provide the same or similar functionality as client devices 202a, 202b, or more generally, as clients according to any of the embodiments described above in connection with FIGS. 1-9. For example, each component may execute, include, or otherwise be associated with a client described above in connection with FIGS. 1-9. For example, each component's client may be provided with and store an identifier indicating a particular data stream, e.g., as described above, and may therefore obtain data from the appropriate multicast stream multicast by price server 1162 on multicast bus 1161.
[0154] In an embodiment, the user setup server 1146 may be provided by the ID server 204 according to any of the embodiments described above in connection with FIGS. 1-9. For example, the user setup server 1146 may be configured to provide the same or similar functionality as the ID server 204 according to any of the embodiments described above in connection with FIGS. 1-9. For example, each trading device 1110 and / or strategy engine 1167 (or its user) may provide the user setup server 1146 with respective connection information for connecting to the data source 208. For example, this may be provided upon registration or configuration of the trading device 1110 and / or strategy engine 1167 with the trading platform provided by the hybrid cloud system 1120, and may be provided from time to time thereafter. In an embodiment, the user setup server 1146 may associate the connection information for each different trading device 1110 and / or strategy engine 1167 (or its user) with an identifier. The user setup server 1146 may provide connection information for each trading device 1110 and / or strategy engine 1167 (or its user) in association with an identifier associated with the connection information to the price server 1162. As a result, the price server 1162 may use the connection information to establish a connection with the data source 203 for each trading device 1110 and / or strategy engine 1167 (or its user), receive multiple data streams accordingly, and determine an identifier for each received data stream. The user setup server 1146 may also provide the identifier associated with the connection information from the trading device 1110 and / or strategy engine 1167 (or its user) to a client associated with each trading device 1110 and / or strategy engine 1167. As a result, a client associated with each trading device 1110 and / or strategy engine 1167 may store an identifier indicating the data stream associated with the trading device 1110 and / or strategy engine 1167.
[0155] In some embodiments, the PDS server 1144 may be provided by the ID server 204 according to any of the embodiments described above in connection with FIGs. 1 through 9. For example, the PDS server 1144 may be configured to provide the same or similar functionality as the ID server 204 according to any of the embodiments described above in connection with FIGs. 1 through 9. In some embodiments, the PDS server 1144 may define new financial instruments for each respective data stream. For example, the trading device 1110 and / or strategy engine 1167 (or its user) may provide connection information to the PDS server 1144 to establish a connection with the data source 208 to receive a particular data stream. The PDS server 1144 may define new financial instruments for the connection information for each different trading device 1110 and / or strategy engine 1167 (or its user). Each new financial instrument definition may itself be an identifier for the associated data stream. The PDS server 1144 may provide the price server 1162 with connection information for each trading device 1110 and / or strategy engine 1167 associated with the financial instrument definition associated with the connection information. As a result, the price server 1162 may use the connection information to establish a connection with the data source 208 for each trading device 1110 and / or strategy engine 1167, receive multiple data streams accordingly, and determine an identifier (in this case, a financial instrument definition) for each received data stream.
[0156] As an example, the PDS server 1144 may store authorizations for clients associated with each trading device 1110 and / or strategy engine 1167 (or its user) to obtain data from a particular data stream, e.g., received via a particular connection. That is, the PDS server 1144 may store authorizations for clients associated with each trading device 1110 and / or strategy engine 1167 (or its user) to access data related to a particular financial instrument defined by the PDS server 1144. For example, these authorizations may be established upon registration or configuration of the trading device 1110 and / or strategy engine 1167 (or its user) with a platform provided by the hybrid cloud system 1120, and may be configured from time to time thereafter. For example, authorization for a particular financial instrument may be established by the trading device 1110 and / or strategy engine 1167 providing connection information for establishing a connection with a data source 208 and receiving a data stream based on the connection for which the financial instrument is defined.
[0157] The PDS server 1144 may store identification information for each trading device 1110 and / or strategy engine 1167 (or its user), such as a user ID or device ID, in association with one or more financial instruments defined for each data stream for which a client associated with the trading device 1110 and / or strategy engine 1167 (or its user) is authorized to obtain data. The API of the client associated with each trading device 1110 and / or strategy engine 1167 may communicate with the PDS server 1144. For example, the API may provide identification information for the trading device 1110 and / or strategy engine 1167 (or its user) to the PDS server 1144. The PDS server 1144 may use the provided identification information to determine one or more financial instruments for which a client associated with the trading device 1110 and / or strategy engine 1167 (or its user) is authorized to obtain data. The PDS server 1144 may provide the determined one or more financial instrument definitions (i.e., identifiers) to the API, which may store the one or more financial instrument definitions (i.e., identifiers) at clients associated with the trading devices 1110 and / or strategy engines 1167. As a result, clients associated with each trading device 1110 and / or strategy engine 1167 may store financial instrument definitions (i.e., identifiers) that indicate the data streams associated with the trading device 1110 and / or strategy engine 1167. That is, clients associated with each trading device 1110 and / or strategy engine 1167 may store financial instrument definitions (i.e., identifiers) that indicate the data streams from which the clients associated with the trading device 1110 and / or strategy engine 1167 have been authorized by the PDS server 1144 to obtain data. This permission-based approach may enable centralized control over the data streams from which the trading devices 1110 and / or strategy engines 1167 can obtain data.
[0158] As used in this disclosure, the phrases "configured to" and "adapted to" encompass an element, structure, or device being modified, arranged, changed, or transformed to perform a particular function or for a particular purpose.
[0159] Some of the illustrated figures depict example block diagrams, systems, and / or flow diagrams that illustrate methods that may be used to implement all or portions of particular embodiments. One or more of the components, elements, blocks, and / or functions of the example block diagrams, systems, and / or flow diagrams may be implemented, alone or in combination, in, for example, hardware, firmware, discrete logic, a set of computer-readable instructions stored on a tangible computer-readable medium, and / or any combination thereof. The example block diagrams, systems, and / or flow diagrams may be implemented, for example, using any combination of application-specific integrated circuits (ASICs), programmable logic devices (PLDs), field-programmable logic devices (FPLDs), discrete logic, hardware, and / or firmware.
[0160] The example block diagrams, systems, and / or flow diagrams may be implemented using, for example, one or more processors, controllers, and / or other processing devices. For example, the embodiments may be implemented using coded instructions, e.g., computer-readable instructions, stored on a tangible computer-readable medium. The tangible computer-readable medium may include various types of volatile and non-volatile storage media, including, for example, random access memory (RAM), read-only memory (ROM), programmable read-only memory (PROM), electrically programmable read-only memory (EPROM), electrically erasable read-only memory (EEPROM), flash memory, hard disk drives, optical media, magnetic tape, file servers, any other tangible data storage devices, or any combination thereof. The tangible computer-readable medium is non-transitory.
[0161] Furthermore, although example block diagrams, systems, and / or flow diagrams have been described above with reference to the figures, other implementations may be employed. For example, the order of execution of the components, elements, blocks, and / or functions may be changed, and / or some of the described components, elements, blocks, and / or functions may be changed, eliminated, subdivided, or combined. Furthermore, any or all of the components, elements, blocks, and / or functions may be executed sequentially and / or in parallel, for example, by separate processing threads, processors, devices, discrete logic, and / or circuits.
[0162] While embodiments have been disclosed, various modifications may be made and equivalents may be substituted. In addition, many modifications may be made to adapt to a particular situation or material. Therefore, it is not intended that the disclosed technology be limited to the particular embodiments disclosed, but rather that the invention will include all embodiments falling within the scope of the appended claims.
[0163] Terms
[0164] Clause 1. A server system comprising: a memory; and at least one processor configured to multicast data to a plurality of clients, each client storing an identifier indicating a data stream associated with that client; the at least one processor further configured to receive a plurality of data streams, each data stream including data; determine the identifier for each of the plurality of received data streams; transmit a mapping between each identifier and a respective multicast stream to the plurality of clients; and multicast data of the plurality of received data streams in accordance with the mapping.
[0165] Clause 2. The server system of clause 1, wherein the mapping includes a mapping between each identifier of the multicast stream and a respective different multicast address, and wherein the at least one processor is configured to, for each received data stream, multicast data of the received data stream using the multicast address mapped to the identifier determined for the data stream.
[0166] Clause 3. The server system of clause 1 or clause 2, wherein the at least one processor is configured to broadcast the mapping over a network to which each of the plurality of clients is connected.
[0167] Clause 4. A server system according to any one of clauses 1 to 3, wherein the at least one processor is configured to generate, for each of the received data streams, a multicast stream including an identifier for the received data stream and data of the received data stream, thereby encoding a mapping into each multicast stream, and multicasting each of the generated multicast streams to the plurality of clients.
[0168] Clause 5. The server system of clause 4, wherein each multicast stream comprises one or more multicast packets comprising a header and a payload, and for each of the generated multicast streams, the header comprises the identifier for the received data stream and the payload comprises data of the received data stream.
[0169] Clause 6. The server system of clause 4 or clause 5, wherein each of the generated multicast streams is multicast using the same multicast address.
[0170] Clause 7. A server system as described in any one of clauses 1 to 6, wherein the at least one processor is configured to normalize data for each of the plurality of received streams that are multicast.
[0171] Clause 8. A server system as described in any one of clauses 1 to 7, wherein the at least one processor is configured to receive the plurality of data streams over respective plurality of different connections, and for each of the received data streams, an identifier of the received data stream is determined based on the connection over which the data stream was received.
[0172] Clause 9. A server system according to any one of clauses 1 to 8, wherein the at least one processor is configured to receive an identifier associated with each connection information for establishing a connection through which each of the data streams is received, and to determine, for each of the plurality of received data streams, the identifier associated with the connection information of the connection through which the data stream is received as the identifier of the data stream.
[0173] Clause 10. A server system according to any one of clauses 1 to 9, wherein each data stream is associated with a particular client, the server system including a server configured to: obtain connection information for each client; associate the connection information for each different client with a different one of the identifiers; provide to the at least one processor, for each client, the identifier associated with the connection information for the client; and provide to each client the identifier associated with the connection information for the client.
[0174] Clause 11. A server system as described in any one of clauses 1 to 10, wherein the at least one processor is configured to receive, for each of the plurality of data streams, connection information for establishing a connection to a data source from which the data stream is received, establish a connection using the connection information, and receive the data stream via the connection.
[0175] Clause 12. A server system as described in clause 11, wherein each data stream is associated with a particular client, and for each data stream, the connection information includes login information for the client associated with the data stream to access the data source.
[0176] Clause 13. A server system according to any one of clauses 1 to 12, the server system implementing a price server of an electronic trading system.
[0177] Clause 14. A server system as described in any one of clauses 1 to 13, wherein the server system includes a data source configured to provide the plurality of data streams to the at least one processor, the plurality of different data streams including price data provided by respective different liquidity providers or combinations of respective different liquidity providers.
[0178] Clause 15. A method of multicasting data to a plurality of clients, each client storing an identifier indicating a data stream associated with the client, the method comprising the steps of: receiving, by a server system, a plurality of data streams, each containing data; determining an identifier for each of the plurality of received data streams; transmitting to the plurality of clients a mapping between each identifier and a respective multicast stream; and multicasting data of the plurality of received data streams in accordance with the mapping.
[0179] Clause 16. A method as described in clause 15, wherein the mapping includes a mapping between each identifier and a different multicast address for each multicast stream, the method including a step by the server system, for each received data stream, multicasting data of the received data stream using the multicast address mapped to the identifier determined for the data stream.
[0180] Clause 17. A method according to clause 15 or clause 16, comprising the step of broadcasting, by the server system, the mapping over a network to which each of the plurality of clients is connected.
[0181] Clause 18. A method as described in clause 15 or clause 17, the method comprising: generating, by the server system, for each of the received data streams, a multicast stream including an identifier for the received data stream and data of the received data stream, thereby encoding the mapping into each multicast stream; and multicasting each of the generated multicast streams to the plurality of clients.
[0182] Clause 19. The method of clause 18, wherein each multicast stream comprises one or more multicast packets, each comprising a header and a payload, and wherein, for each of the generated multicast streams, the header comprises an identifier for the received data stream and the payload comprises data of the received data stream.
[0183] Clause 20. The method of clause 18 or clause 19, wherein each of the generated multicast streams is multicast using the same multicast address.
[0184] Clause 21. A method according to any one of clauses 15 to 20, comprising the step of normalising data of each of the plurality of received streams that are multicast by the server system.
[0185] Clause 22. A method according to any one of clauses 15 to 21, comprising receiving, by the server system, the plurality of data streams via respective plurality of different connections, wherein for each of the received data streams, the identifier for the received data stream is determined based on the connection over which the data stream was received.
[0186] Clause 23. A method according to any one of clauses 15 to 22, comprising the steps of: receiving, by the server system, the identifiers each associated with respective connection information establishing a connection through which each of the data streams is received; and determining, for each of the plurality of received data streams, the identifier associated with the connection information of the connection through which the data stream is received as the identifier for the data stream.
[0187] Clause 24. A method according to any one of clauses 15 to 23, wherein each data stream is associated with a particular client, the method comprising the steps of: obtaining, by the server, connection information for each client; associating the connection information for each different client with a different one of the identifiers; for each client, providing to the server system the identifier associated with the connection information for the client; and providing to each client a premise identifier associated with the connection information for the client.
[0188] Clause 25. A method according to any one of clauses 15 to 24, comprising the steps of: receiving, by the server system, for each of the plurality of data streams, connection information for establishing a connection to a data source from which the data stream is received; establishing the connection using the connection information; and receiving the data stream via the connection.
[0189] Clause 26. The method of clause 25, wherein each data stream is associated with a particular client, and for each data stream, the connection information includes login information for the client associated with the data stream to access the data source.
[0190] Clause 27. The method of any one of clauses 15 to 26, wherein the server system implements a price server of an electronic trading system.
[0191] Clause 28. The method of any one of clauses 15 to 27, wherein the plurality of data streams are received by the server system from data sources, and the plurality of different data streams include price data provided by respective different liquidity providers or respective different combinations of liquidity providers.
[0192] Clause 29. A tangible computer-readable medium containing instructions that, when executed, cause at least one processor of a server system to perform functions, the at least one processor being configured to multicast data to a plurality of clients, each client storing an identifier indicating a data stream associated with the client, the functions including at least receiving a plurality of the data streams, each data stream containing data; determining the identifier for each of the plurality of received data streams; transmitting a mapping between each identifier and a respective multicast stream to the plurality of clients; and multicasting data of the plurality of received data streams in accordance with the mapping.
[0193] Clause 30. A tangible computer-readable medium as described in Clause 29, wherein the mapping includes a mapping between each identifier and a respective different multicast address of the multicast stream, and the function further includes, for each received data stream, multicasting data of the received data stream using the multicast address that is mapped to the identifier determined for the data stream.
[0194] Clause 31. The tangible computer-readable medium of clause 29 or clause 30, wherein the function further includes broadcasting the mapping over a network to which the plurality of clients are connected.
[0195] Clause 32. A tangible computer-readable medium according to any one of clauses 29 to 31, wherein the functions further include: for each of the received data streams, generating a multicast stream including an identifier for the received data stream and data of the received data stream, thereby encoding the mapping into each multicast stream; and multicasting each of the generated multicast streams to the plurality of clients.
[0196] Clause 33. A tangible computer-readable medium as described in Clause 32, wherein each multicast stream comprises one or more multicast packets comprising a header and a payload, and for each of the generated multicast streams, the header comprises an identifier for the received data stream and the payload comprises data of the received data stream.
[0197] Clause 34. The tangible computer-readable medium of clause 32 or clause 33, wherein each of the generated multicast streams is multicast using the same multicast address.
[0198] Clause 35. A tangible computer-readable medium according to any one of clauses 29 to 34, wherein the function further comprises normalizing data for each of the plurality of received streams that are multicast.
[0199] Clause 36. A tangible computer-readable medium according to any one of clauses 29 to 35, wherein the function further comprises receiving the plurality of data streams over a respective plurality of different connections, and wherein for each of the received data streams, the identifier for the received data stream is determined based on the connection over which the data stream is received.
[0200] Clause 37. A tangible computer-readable medium according to any one of clauses 29 to 36, wherein the functions further include receiving the identifiers each associated with respective connection information establishing a connection over which each of the data streams is received, and determining, for each of the plurality of received data streams, the identifier associated with the connection information of the connection over which the data stream is received as the identifier of the data stream.
[0201] Clause 38. A tangible computer-readable medium according to any one of clauses 29 to 37, wherein each data stream is associated with a particular client, and wherein the instructions, when executed, cause at least one processor of a server of the server system to perform functions including at least obtaining the connection information for each client, associating the connection information for each different client with a different one of the identifiers, providing, for each client, the identifier associated with the connection information to at least one processor of the server system, and providing, for each client, the identifier associated with the connection information for the client.
[0202] Clause 39. A tangible computer-readable medium according to any one of clauses 29 to 38, wherein the functions further include, for each of the plurality of data streams, receiving connection information for establishing a connection to a data source from which the data stream is received, establishing the connection using the connection information, and receiving the data stream via the connection.
[0203] Clause 40. The tangible computer-readable medium of clause 39, wherein each data stream is associated with a particular client, and for each data stream, the connection information includes login information for the client associated with the data stream to access the data source.
[0204] Clause 41. The tangible computer readable medium of any one of clauses 29 to 40, wherein the server system implements a price server of an electronic trading system.
[0205] Clause 42. A tangible computer-readable medium according to any one of clauses 29 to 41, wherein the plurality of data streams are received by the server system from data sources, the plurality of different data streams including price data provided by respective different liquidity providers or combinations of respective different liquidity providers.
[0206] Clause 43. A server system comprising: a memory; and at least one processor configured to multicast data to a plurality of clients, each client storing an identifier indicative of a data stream associated with said client, said at least one processor further configured to: receive a plurality of data streams, each containing data; determine the identifier for each of said plurality of received data streams; generate a mapping between each identifier and a respective different multicast address; broadcast the mapping to said plurality of clients; and, for each received data stream, multicast data of the received data stream using the multicast address mapped to the identifier determined for the received data stream.
[0207] Clause 44. A server system as described in Clause 43, wherein the at least one processor is configured to: normalize the data for each of the plurality of received streams that are multicast.
[0208] Clause 45. A server system as described in Clause 43 or Clause 44, wherein the at least one processor is configured to receive the plurality of data streams via respective plurality of different connections, and for each of the received data streams, the identifier for the received data stream is determined based on the connection over which the data stream was received.
[0209] Clause 46. A server system as described in any one of Clauses 43 to 45, wherein the at least one processor is configured to receive the identifier associated with each connection information establishing a connection through which each of the data streams is received, and for each of the plurality of received data streams, determine the identifier associated with the connection information of the connection through which the data stream is received as the identifier for the data stream.
[0210] Clause 47. A server system according to any one of clauses 43 to 46, wherein each data stream is associated with a particular client, the server system including a server configured to: obtain the connection information for each client; associate the connection information for each different client with a different one of the identifiers; provide to the at least one processor, for each client, the identifier associated with the connection information for the client; and provide to each client a premise identifier associated with the connection information for the client.
[0211] Clause 48. A server system as described in any one of clauses 43 to 47, wherein the at least one processor is configured to receive, for each of the plurality of data streams, connection information for establishing a connection to a data source from which the data stream is received, establish the connection using the connection information, and receive the data stream via the connection.
[0212] Clause 49. A server system as described in clause 48, wherein each data stream is associated with a particular client, and for each data stream, the connection information includes login information for the client associated with the data stream to access the data source.
[0213] Article 50. 49. A server system according to any one of clauses 43 to 49, implementing a price server of an electronic trading system.
[0214] Article 51. 51. The server system of any one of clauses 43 to 50, wherein the server system includes a data source configured to provide the plurality of data streams to the at least one processor, the plurality of different data streams including price data provided by respective different liquidity providers or combinations of respective different liquidity providers.
[0215] Clause 52. A method of multicasting data to a plurality of clients, each client storing an identifier indicating a data stream associated with that client, the method comprising: receiving, by a server system, a plurality of said data streams, each said data stream containing data; determining an identifier for each of said plurality of received data streams; generating a mapping between each identifier and a respective different multicast address; broadcasting said mapping to said plurality of clients; and for each received data stream, multicasting data of the received data stream using the multicast address mapped to the identifier determined for the received data stream.
[0216] Clause 53. A tangible computer-readable medium comprising instructions that, when executed, cause at least one processor of a server system to perform functions, the at least one processor configured to multicast data to a plurality of clients, each client storing an identifier indicative of a data stream associated with the client, the functions including at least receiving a plurality of said data streams, each said data stream including data; determining the identifier for each of the plurality of received data streams; generating a mapping between each identifier and a respective different multicast address; broadcasting the mapping to the plurality of clients; and for each received data stream, multicasting data of the received data stream using the multicast address mapped to the identifier determined for the received data stream.
[0217] Clause 54. A server system comprising: a memory; and at least one processor configured to multicast data to a plurality of clients, each client storing an identifier indicating a data stream associated with the client, the at least one processor further configured to: receive a plurality of data streams, each data stream including data; determine the identifier for each of the plurality of received data streams; generate, for each of the received data streams, a multicast stream including the identifier for the received data stream and data of the received data stream; and multicast the generated multicast stream to the plurality of clients.
[0218] Clause 55. A server system as described in Clause 54, wherein each multicast stream comprises one or more multicast packets, each comprising a header and a payload, and for each of the generated multicast streams, the header comprises the identifier for the received data stream and the payload comprises data of the received data stream.
[0219] Clause 56. The server system of clause 54 or clause 55, wherein each of the generated multicast streams is multicast using the same multicast address.
[0220] Clause 57. A server system described in any one of clauses 54 to 56, wherein the at least one processor is configured to normalize the data for each of the plurality of received streams that are multicast.
[0221] Clause 58. A server system as described in any one of clauses 54 to 57, wherein the at least one processor is configured to receive the plurality of data streams via respective plurality of different connections, and for each of the received data streams, an identifier for the received data stream is determined based on the connection over which the data stream is received.
[0222] Clause 59. A server system as described in any one of clauses 54 to 58, wherein the at least one processor is configured to receive an identifier associated with each connection information establishing a connection through which each of the data streams is received, and for each of the plurality of received data streams, determine the identifier associated with the connection information of the connection through which the data stream is received as the identifier of the data stream.
[0223] Clause 60. A server system as described in any one of clauses 54 to 59, wherein each data stream is associated with a particular client, the server system including a server configured to: obtain connection information for each client; associate the connection information for each different client with a different one of the identifiers; provide to the at least one processor, for each client, an identifier associated with the connection information for the client; and provide to each client the identifier associated with the connection information for the client.
[0224] Clause 61. A server system according to any one of clauses 54 to 60, wherein the at least one processor is configured to: receive, for each of a plurality of data streams, connection information for establishing a connection to a data source from which the data stream is received, establish the connection using the connection information, and receive the data stream via the connection.
[0225] Clause 62. The server system of clause 61, wherein each data stream is associated with a particular client, and for each data stream, the connection information includes login information for the client associated with the data stream to access the data source.
[0226] Clause 63. The server system of any one of clauses 54 to 62, wherein the server system implements a price server of an electronic trading system.
[0227] Clause 64. A server system as described in any one of Clauses 54 to 63, the server system including a data source configured to provide the plurality of data streams to the at least one processor, the plurality of different data streams including price data provided by respective different liquidity providers or combinations of respective different liquidity providers.
[0228] Clause 65. A method for multicasting data to a plurality of clients, each client storing an identifier indicating a data stream associated with said client, the method comprising the steps of: receiving, by a server system, a plurality of said data streams, each said data stream containing data; determining said identifier for each of said plurality of received data streams; generating, for each of said received data streams, a multicast stream containing said identifier for said received data stream and data of said received data stream; and multicasting said generated multicast stream to said plurality of clients.
[0229] Clause 66. A tangible computer-readable medium comprising instructions that, when executed, cause at least one processor of a server system to perform functions, the at least one processor configured to multicast data to a plurality of clients, each client storing an identifier indicating a data stream associated with the client, the functions comprising at least receiving a plurality of the data streams, each data stream comprising data; determining an identifier for each of the plurality of received data streams; generating, for each of the received data streams, a multicast stream comprising the identifier for the received data stream and data of the received data stream; and multicasting the generated multicast stream to the plurality of clients.
[0230] Clause 67. A client system comprising: a memory that stores an identifier indicating a data stream associated with the client system; and at least one processor, the at least one processor configured to: receive from a server system a mapping between a plurality of identifiers and a respective plurality of multicast streams; match the stored identifier with an identifier in the mapping; and obtain data of the multicast stream that is mapped to the matched identifier in the mapping.
[0231] Clause 68. A client system as described in Clause 67, wherein the mapping includes a mapping between the plurality of identifiers and respective different multicast addresses, and wherein the at least one processor is further configured to configure a communication interface of the client system to receive data transmitted at a destination address corresponding to the multicast address mapped to the matching identifier in the mapping.
[0232] Clause 69. A client system as described in Clause 67, wherein the mapping is provided by including a respective identifier in each different one of a plurality of multicast streams, and wherein the at least one processor is further configured to receive the plurality of multicast streams and obtain data from a multicast stream of the plurality of multicast streams that includes an identifier that matches the stored identifier.
[0233] Clause 70. A method, comprising the steps of: storing, by a client system, an identifier indicating a data stream associated with the client system; receiving from a server system a mapping between a plurality of identifiers and a respective plurality of multicast streams; matching the stored identifier with an identifier in the mapping; and obtaining data of the multicast stream mapped to the matching identifier in the mapping.
[0234] Clause 71. The method of clause 70, wherein the mapping includes a mapping between the plurality of identifiers and a respective plurality of different multicast addresses, the method including the step of configuring, by the client system, a communications interface of the client system to receive data transmitted at a destination address corresponding to the multicast address that is mapped to the matching identifier in the mapping.
[0235] Clause 72. A method as described in clause 70, wherein the mapping is provided by including a respective identifier in each different one of a plurality of multicast streams, the method comprising the steps of receiving, by a client system, the plurality of multicast streams, and retrieving data from a multicast stream of the plurality of multicast streams that includes an identifier that matches the stored identifier.
[0236] Clause 73. A tangible computer-readable medium comprising instructions that, when executed, cause at least one processor of a client system to perform functions, wherein the client stores identifiers indicating data streams associated with the client system, the functions including at least receiving from a server system a mapping between a plurality of identifiers and a respective plurality of multicast streams, matching the stored identifiers with identifiers in the mapping, and obtaining data of the multicast streams that are mapped to the matched identifiers in the mapping.
[0237] Clause 74. A tangible computer-readable medium as described in Clause 73, wherein the mapping includes a mapping between the plurality of identifiers and a respective plurality of different multicast addresses, and wherein the function includes configuring a communications interface of the client system to receive data transmitted at a destination address corresponding to the multicast address mapped to the matching identifier in the mapping.
[0238] Clause 75. A tangible computer-readable medium according to clause 73, wherein the mapping is provided by including a respective identifier in each distinct one of a plurality of multicast streams, and wherein the functions include receiving the plurality of multicast streams and obtaining data from one multicast stream of the plurality of multicast streams that includes the identifier that matches the stored identifier.
[0239] Clause 76. A system comprising a server system according to any one of clauses 1 to 14 and a client system according to any one of clauses 67 to 69.
[0240] Clause 73. A method comprising the method according to any one of clauses 15 to 28 and the method according to any one of clauses 70 to 72.
Claims
1. A server system, an authority server in communication with a plurality of clients, the authority server utilizing client device information provided by the plurality of clients to determine, for each of the plurality of clients, an identifier corresponding to at least one data stream of a plurality of data streams; a memory; and at least one processor configured to multicast data to the plurality of clients. Including, each client stores an identifier provided by the authoritative server and corresponding to at least one data stream of the plurality of data streams associated with that client; The at least one processor further comprises: receiving the plurality of data streams, each containing data; determining the identifier corresponding to at least one of the plurality of received data streams; transmitting a mapping between each identifier and a respective multicast stream to the plurality of clients; and multicasting data of the plurality of received data streams according to the mapping; It was configured as follows: Server system.
2. the mapping includes a mapping between each identifier and a respective different multicast address of the multicast stream; The at least one processor For each received data stream, multicasting data for the received data stream using the multicast address that is mapped to the identifier determined for the data stream. It was configured as follows: The server system according to claim 1 .
3. The at least one processor broadcasting the mapping over a network to which each of the plurality of clients is connected; It was configured as follows: The server system according to claim 2 .
4. The at least one processor generating, for each of the received data streams, a multicast stream including the identifier for the received data stream and data of the received data stream, thereby encoding the mapping into each multicast stream; Multicasting each of the generated multicast streams to the plurality of clients. It was configured as follows: The server system according to claim 1 .
5. each multicast stream includes one or more multicast packets, each including a header and a payload; for each of the generated multicast streams, the header includes the identifier for the received data stream, and the payload includes data of the received data stream; The server system according to claim 4.
6. each of the generated multicast streams is multicast using the same multicast address; The server system according to claim 4.
7. A server system, an authority server in communication with a plurality of clients, the authority server utilizing client device information provided by the plurality of clients to determine, for each of the plurality of clients, an identifier corresponding to at least one data stream of a plurality of data streams; memory, and at least one processor configured to multicast data to the plurality of clients; Including, each client stores an identifier provided by the authoritative server and corresponding to at least one data stream of the plurality of data streams associated with that client; The at least one processor further comprises: receiving the plurality of data streams, each containing data; determining the identifier corresponding to at least one of the plurality of received data streams; generating a mapping between each identifier and each distinct multicast address; broadcasting the mapping to the plurality of clients; For each received data stream, multicasting data of the received data stream using the multicast address mapped to the identifier determined for the received data stream. It was configured as follows: Server system.
8. A server system, an authority server in communication with a plurality of clients, the authority server utilizing client device information provided by the plurality of clients to determine, for each of the plurality of clients, an identifier corresponding to at least one data stream of a plurality of data streams; memory, and at least one processor configured to multicast data to a plurality of clients; each client stores an identifier provided by the authoritative server and corresponding to at least one data stream of the plurality of data streams associated with that client; The at least one processor further comprises: receiving the plurality of data streams, each containing data; determining the identifier corresponding to at least one of the plurality of received data streams; generating, for each of the received data streams, a multicast stream including the identifier for the received data stream and data of the received data stream; multicasting the generated multicast stream to the plurality of clients; It was configured as follows: Server system.
9. The at least one processor configured to normalize data of each of the plurality of received streams that are multicast; 9. The server system according to claim 1, 7 or 8.
10. The at least one processor configured to receive the plurality of data streams over a respective plurality of different connections; for each of the received data streams, an identifier for the received data stream is determined based on the connection over which the data stream is received; 9. The server system according to claim 1, 7 or 8.
11. The at least one processor configured to receive an identifier each associated with a respective connection information for establishing a connection over which each of the data streams is received; For each of the plurality of received data streams, determining an identifier associated with connection information of a connection through which the data stream is received as an identifier for that data stream. It was configured as follows:
9. The server system according to claim 1, 7 or 8.
12. Each data stream is associated with a particular client, The server system includes a server, The server Obtaining the connection information for each client; associating connection information for each different client with a different one of said identifiers; providing, for each client, an identifier to the at least one processor that is associated with the connection information for that client; Providing each client with the identifier associated with the connection information for that client. It was configured as follows: The server system according to claim 11.
13. The at least one processor For each of the plurality of data streams, receiving connection information for establishing a connection to a data source from which the data stream is to be received; establishing the connection using the connection information; receive the data stream over the connection It was configured as follows: The server system according to claim 1 .
14. Each data stream is associated with a particular client, for each data stream, the connection information includes login information for the client associated with the data stream to access the data source; The server system according to claim 13.
15. Implementing a price server for an electronic trading system; 9. The server system according to claim 1, 7 or 8.
16. the server system includes a data source configured to provide the plurality of data streams to the at least one processor; the plurality of different data streams include price data provided by each different liquidity provider or each different combination of liquidity providers; The server system of claim 15.
17. 1. A client system, comprising: a memory provided by an authoritative server for storing an identifier corresponding to at least one of a plurality of data streams associated with a client of the client system; and at least one processor; Including, The at least one processor receiving, from the server system, a mapping between a plurality of identifiers and a respective plurality of multicast streams; Matching the stored identifier with an identifier in the mapping; and Obtain the data of the multicast stream that is mapped to the matching identifier in the mapping. It was configured as follows: Client system.
18. the mapping includes a mapping between the plurality of identifiers and a respective plurality of different multicast addresses; The at least one processor further comprises: Configuring a communications interface of the client system to receive data transmitted with a destination address corresponding to a multicast address mapped to the matching identifier in the mapping. It was configured as follows:
18. The client system of claim 17.
19. the mapping is provided by including a respective identifier in each distinct one of a plurality of multicast streams; The at least one processor further comprises: receiving the plurality of multicast streams; Obtaining data from a multicast stream that includes an identifier that matches the stored identifier among the plurality of multicast streams. It was configured as follows:
18. The client system of claim 17.
20. 1. A method for multicasting data to a plurality of clients, comprising: an authorization server in communication with a plurality of clients, utilizing client device information provided by the plurality of clients, to determine, for each of the plurality of clients, an identifier corresponding to at least one data stream of the plurality of data streams; each client stores an identifier provided by the authoritative server and corresponding to at least one data stream of the plurality of data streams associated with that client; The method includes: receiving the plurality of data streams, each data stream containing data; determining the identifier corresponding to at least one of the plurality of received data streams; transmitting a mapping between each identifier and a respective multicast stream to the plurality of clients; multicasting data of the plurality of received data streams according to the mapping; A method comprising:
21. A computer program comprising instructions that, when executed, cause at least one processor of a server system to perform a function, an authorization server in communication with a plurality of clients configured to utilize client device information provided by the plurality of clients to determine, for each of the plurality of clients, an identifier corresponding to at least one data stream of the plurality of data streams; the at least one processor is configured to multicast data to the plurality of clients; each client stores an identifier provided by the authoritative server and corresponding to at least one data stream of the plurality of data streams associated with that client; The function includes at least receiving the plurality of data streams, each containing data; determining the identifier corresponding to at least one of the plurality of received data streams; transmitting a mapping of each identifier to a respective multicast stream to the plurality of clients; multicasting data of the plurality of received data streams according to the mapping; and a computer program comprising: