Data processing method, device, server, system, and computer storage medium

CN116962481BActive Publication Date: 2026-09-25XIAN HEHUA RUIBO TECH CO LTD
View PDF 2 Cites 0 Cited by

Patent Information

Application Number
CN202210402964.3
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Filing Date
2022-04-18
Publication Date
2026-09-25
Estimated Expiration
2042-04-18

AI Technical Summary

Benefits of technology

[0050]第六方面,本申请实施例提供了一种计算机程序产品,所述计算机程序产品中的指令由电子设备的处理器执行时,使得所述电子设备执行如第一方面所述的数据处理方法。

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN116962481B_ABST
    Figure CN116962481B_ABST
Patent Text Reader

Abstract

The application discloses a data processing method and device, a server, a system and a computer storage medium, which can process first data transmitted by a client through a first process in the process that a first server establishes a communication connection with the client, wherein the first process is associated with the client. Then, in the case that the communication connection with the client is interrupted, the first process is transferred to a waiting state within a first time length, and in the case that the communication connection with the client is re-established and the first process is in the waiting state, the first process is transferred to a running state to continue processing the first data. In this way, in the process that the medical image data transmitted by the client is processed by the server, if the server and the client are disconnected, the original process can be returned through reconnection, and the medical image data of the client can be continuously processed, thereby improving the processing efficiency of the medical image data.
Need to check novelty before this filing date? Find Prior Art

Description

Technical Field

[0001] This application belongs to the field of imaging technology, and in particular relates to a data processing method, apparatus, server, system and computer storage medium. Background Technology

[0002] In recent years, medical image visualization systems have become increasingly relied upon by clinicians. Currently, most image visualization systems are implemented based on a client / server (C / S) architecture. In this architecture, multiple clients can communicate with the server via a network. The server, acting as the backend, receives client requests, performs centralized data storage, rapid decoding and compression of image data, image segmentation, and 3D volume rendering, generating image visualization data which is then returned to the client's page for display.

[0003] However, in the process of server-client collaboration for medical image visualization, the connection between the server and client must be maintained at all times and cannot be interrupted. If the connection is broken, the corresponding client data on the server will be cleared. This means that the server will have to start processing the client's image data again the next time a connection is established, which not only reduces the data processing efficiency of medical image visualization but also increases the operational complexity for users. Summary of the Invention

[0004] This application provides a data processing method, apparatus, server, system, and computer storage medium that enables the server and client to continue processing data from before the interruption after a communication interruption and subsequent re-establishment of the connection.

[0005] In a first aspect, embodiments of this application provide a data processing method applied to a first server, the method comprising:

[0006] During the process of establishing a communication connection with the client, the first process processes the first data transmitted by the client, and the first process is associated with the client.

[0007] In the event of an interruption of communication with the client, the first process is transferred to a waiting state within a first duration.

[0008] Once a communication connection is re-established with the client, and the first process is in a waiting state, control the first process to switch to a running state and continue processing the first data.

[0009] In some embodiments, before processing the first data transmitted by the client through the first process, the method further includes:

[0010] Receive a first scheduling instruction from the second server, which is generated based on a first request sent by the client;

[0011] In response to the first scheduling instruction, create the first connection socket;

[0012] A communication connection is established with the client based on the first connection socket.

[0013] In some embodiments, after establishing a communication connection with the client based on the first connection socket, the method further includes:

[0014] Receive the identity message sent by the client, which includes the client's identity information;

[0015] The first process is called from the process pool, and then associated with the identity information.

[0016] The first process receives the first data sent by the client and processes the first data.

[0017] In some embodiments, after controlling the first process to transition to a waiting state within a first duration, the method further includes:

[0018] Within the first time period, a second scheduling instruction sent by a second server is received. The second scheduling instruction is generated based on a second request sent by the client, and the second request includes the client's identity information.

[0019] In response to the second scheduling instruction, a second connection socket is created to establish a communication connection with the client;

[0020] The second scheduling instruction is generated based on the identity information to determine the historical communication connections established between the first server and the client.

[0021] In some embodiments, when a communication connection is re-established with the client and the first process is in a waiting state, controlling the first process to transition to a running state and continue processing the first data includes:

[0022] Upon re-establishing a communication connection with the client, locate the associated first process based on the identity information;

[0023] If the first process being searched is in a waiting state, control the first process to transition from the waiting state to the running state;

[0024] Continue processing the first data through the first process.

[0025] In some embodiments, after processing the first data transmitted by the client through the first process, the method further includes:

[0026] If the communication connection with the client is interrupted and the interruption duration exceeds the first duration, the first process saves the processing data of the first data.

[0027] The control process is transferred to the terminated state so that, in the event of a re-establishment of communication with the client, the processing data of the first data can be read by the second process.

[0028] In some embodiments, before reading the processing data of the first data through the second process after re-establishing a communication connection with the client, the method further includes:

[0029] If the first time period is exceeded, a third scheduling instruction is received from the second server. The third scheduling instruction is generated based on the second request sent by the client, and the second request includes the client's identity information.

[0030] In response to the third scheduling instruction, a third connection socket is created;

[0031] Establish a communication connection with the client based on the third connection socket;

[0032] Call the second process from the process pool and associate the second process with the identity information;

[0033] The second process receives the second data sent by the client and processes the second data.

[0034] In some embodiments, upon re-establishing a communication connection with the client, the processing data for reading the first data via a second process includes:

[0035] If a communication connection is re-established with the client, and before receiving the second data sent by the client through the second process, the corresponding processing data for the first data is determined based on the client's identity information;

[0036] The second process reads the processed data of the first data to restore the processing progress of the first data.

[0037] Secondly, embodiments of this application provide a data processing apparatus applied to a first server, the apparatus comprising:

[0038] The first processing module is used to process the first data transmitted by the client through the first process during the process of establishing a communication connection with the client. The first process is associated with the client.

[0039] The first control module is used to control the first process to transfer to a waiting state within a first duration in the event that the communication connection with the client is interrupted.

[0040] The second control module is used to control the first process to switch to the running state and continue processing the first data when a communication connection is re-established with the client and the first process is in a waiting state.

[0041] In some embodiments, the apparatus further includes:

[0042] The storage module is used to save the processed data of the first data through the first process when the communication connection with the client is interrupted and the interruption time exceeds the first time duration.

[0043] The fourth control module is used to control the first process to transition to the terminated state, so that when a communication connection is re-established with the client, the second process can read the processed data of the first data.

[0044] Thirdly, embodiments of this application provide a server, which includes: a processor and a memory storing computer program instructions;

[0045] When the processor executes computer program instructions, it implements the data processing method as described in the first aspect.

[0046] Fourthly, embodiments of this application provide a data processing system for the server described in the third aspect, wherein the server is an application server.

[0047] The system also includes a website server.

[0048] The website server is configured to generate a scheduling instruction based on a request sent by the client and send it to the application server so that the application server can implement the data processing method as described in the first aspect.

[0049] Fifthly, embodiments of this application provide a computer storage medium storing computer program instructions, which, when executed by a processor, implement the data processing method as described in the first aspect.

[0050] In a sixth aspect, embodiments of this application provide a computer program product in which instructions, when executed by a processor of an electronic device, cause the electronic device to perform the data processing method as described in the first aspect.

[0051] The data processing method, apparatus, server, and computer storage medium of this application embodiment can process first data transmitted by the client through a first process during the process of establishing a communication connection between the first server and the client, wherein the first process is associated with the client. Then, if the communication connection with the client is interrupted, the first process is controlled to transfer to a waiting state within a first time period. When the communication connection with the client is re-established and the first process is in the waiting state, the first process is controlled to transfer to a running state to continue processing the first data. In this way, during the process of processing medical image data transmitted by the client through the server, if the server and client connection is interrupted, the process can return to the original process and continue processing the client's medical image data by reconnecting. This embodiment can reduce the operations performed by the user when the client and server communication is interrupted (such as resending image data in addition to re-establishing the connection), saving medical image data processing time and thus improving the processing efficiency of medical image data. Attached Figure Description

[0052] To more clearly illustrate the technical solutions of the embodiments of this application, the accompanying drawings used in the embodiments of this application will be briefly introduced below. For those skilled in the art, other drawings can be obtained based on these drawings without creative effort.

[0053] Figure 1 This is a schematic diagram illustrating the processes executed by the server in related technologies;

[0054] Figure 2 This is a schematic flowchart of a data processing method provided in one embodiment of this application;

[0055] Figure 3 This is a schematic diagram of the system architecture provided in one embodiment of this application;

[0056] Figure 4 This is a schematic diagram of the structure of a data processing apparatus provided in another embodiment of this application;

[0057] Figure 5 This is a schematic diagram of the server structure provided in another embodiment of this application. Detailed Implementation

[0058] The features and exemplary embodiments of various aspects of this application will be described in detail below. To make the objectives, technical solutions, and advantages of this application clearer, the application will be further described in detail below with reference to the accompanying drawings and specific embodiments. It should be understood that the specific embodiments described herein are only intended to explain this application and not to limit it. For those skilled in the art, this application can be implemented without some of these specific details. The following description of the embodiments is merely to provide a better understanding of this application by illustrating examples.

[0059] It should be noted that, in this document, relational terms such as "first" and "second" are used merely to distinguish one entity or operation from another, and do not necessarily require or imply any such actual relationship or order between these entities or operations. Furthermore, the terms "comprising," "including," or any other variations thereof are intended to cover non-exclusive inclusion, such that a process, method, article, or apparatus that comprises a list of elements includes not only those elements but also other elements not expressly listed, or elements inherent to such a process, method, article, or apparatus. Without further limitations, an element defined by the phrase "comprising..." does not exclude the presence of additional identical elements in the process, method, article, or apparatus that includes said element.

[0060] In related technologies, medical image visualization systems using a client / server architecture, during the process of realizing medical image visualization, such as... Figure 1 As shown, the main process 101 of server 100 creates multiple child processes 102 and a listening thread 103. The listening thread 103 can listen for connection requests from clients. After the server establishes a communication connection with the client based on the listened connection requests, the client's medical image data is processed by the worker thread 104 of the child process 102, such as storing, decoding, compressing, segmenting, and rendering the medical image data in three dimensions.

[0061] The aforementioned method of processing medical image data requires a constant communication connection between the server and the client. If this connection is interrupted, the corresponding medical image data on the server will be cleared. When the connection is re-established, the server will retrieve the client's medical image data through a separate sub-process and start processing from scratch. This necessitates the user reopening the application on the client side to load and retransmit the medical image data, which is cumbersome and reduces the efficiency of medical image visualization data processing.

[0062] While some related technologies can use shared memory to save the server's previously processed medical image data from the client when communication between the server and client is interrupted, this method requires communication between different processes to ensure that data corruption does not occur when different processes process the same client's medical image data. Therefore, this data processing method also suffers from inefficiency.

[0063] To address the problems in related technologies, embodiments of this application provide a data processing method, apparatus, server, system, and computer storage medium. This method can associate a process with a client for a certain period, ensuring that the process continues even if communication between the server and client is interrupted. Once communication is restored, the process can continue processing client data, thereby reducing user operations on the client and improving data processing efficiency. The data processing method provided in this application embodiment is described below.

[0064] Figure 2 A schematic flowchart of a data processing method according to an embodiment of this application is shown. This method can be applied to a first server, such as... Figure 2 As shown, the method includes steps S201 to S203:

[0065] During the process of establishing a communication connection with the client, S201 processes the first data transmitted by the client through the first process, and the first process is associated with the client.

[0066] In the event that the communication connection with the client is interrupted, S202 controls the first process to transfer to a waiting state within a first duration.

[0067] If S203 re-establishes a communication connection with the client and the first process is in a waiting state, it controls the first process to switch to a running state and continue processing the first data.

[0068] According to an embodiment of this application, during the process of establishing a communication connection with the client, the first server processes the first data transmitted by the client through a first process and associates the first process with the client. Then, if the communication connection between the first server and the client is interrupted, the first process is controlled to transfer to a waiting state within a first time period. Upon re-establishing the communication connection with the client, and with the first process still in a waiting state, since the first process is associated with the client, it can be directly controlled to transfer to a running state to continue processing the first data. Thus, during the processing of medical imaging data (Digital Imaging and Communications in Medicine, DICOM) transmitted by the client through the server, if the connection between the server and the client is interrupted, it can be restored by reconnecting and returning to the original process to continue processing the client's medical imaging data. This embodiment can reduce the operations performed by the user when the communication between the client and the server is interrupted (such as resending image data in addition to re-establishing the connection), saving processing time for medical imaging data and thus improving the processing efficiency of medical imaging data.

[0069] In this embodiment of the application, the first process may be one of the processes in a process pool created by the server, and the processes in the process pool may execute concurrent tasks.

[0070] For example, in a medical image data visualization scenario, the client can send a connection request to the first server through the page of the medical image data visualization application. The first server responds to the connection request and establishes a communication connection with the client. After establishing the communication connection, the first server selects a first process from its process pool to associate with the client and records the client's identity information. Then, after the user transmits medical image data (i.e., the first data) to the first server through the corresponding page on the client, step S201 causes the first process to receive the medical image data and perform processing such as storage, decoding, compression, segmentation, and 3D volume rendering. The processing results of the first process on the medical image data are returned to the client, where the corresponding 3D image can be displayed on the client's page.

[0071] In this example, when the communication connection between the first server and the client is interrupted due to page closure or network abnormalities, step S202 allows the first process to temporarily enter a waiting state for a first period of time. At this time, the connection between the first server and the client is broken, and the first process is also in a state of no connection with the process transmitting medical image data to the client, but the first process does not terminate; it is temporarily transferred to a waiting state. If, within the first period of time, the user initiates a connection request again from the aforementioned page on the client, the first server can respond to the request and re-establish a communication connection with the client. Then, through step S203, based on the association between the client and the first process, the first server allows the first process to enter a running state, continuing to process the medical image data corresponding to the time of the communication interruption. The server can also return the processing progress and current processing data to the client's page, continuing to display the visualization screen from the time of the communication interruption. Thus, after the user's client restores its connection with the first server, it can see the visualization screen that was displayed on the page when the interruption occurred, without requiring the user to retransmit the medical image data or the server to reprocess the medical image data from scratch, thereby reducing user operations and saving data processing time for medical image visualization.

[0072] In some embodiments, to improve data processing efficiency, the first server can be used as a backend application server, accepting scheduling from the frontend server and executing steps S201 to S203 to process the client's data. Specifically, in this embodiment, before step S201, the method may further include steps S204 to S206:

[0073] S204 receives a first scheduling instruction from the second server, the first scheduling instruction being generated based on a first request sent by the client;

[0074] S205 responds to the first scheduling instruction by creating the first connection socket;

[0075] S206 establishes a communication connection with the client based on the first connection socket.

[0076] In this embodiment, the second server acts as a front-end server, capable of establishing connections with multiple clients and assigning different first servers as back-end application servers to process the first data. For example, refer to... Figure 3 In the system architecture shown, the second server 301 can be an Nginx web server, providing load balancing services and balancing the work of multiple backend first servers 302.

[0077] In this example, the second server 301 listens in real time for the first request sent by the client 303. This first request can be a full-duplex WebSocket request. After receiving the first request, the second server 301 can use any of the following load balancing schemes—round-robin, weight comparison, IP hash algorithm mapping, least connections, or third-party fair plugins—to perform load balancing across multiple background first servers 302, assigning the client a first server 302 with the best operating status. Therefore, the second server 301 generates a first scheduling instruction based on the first request and sends it to the first server 302.

[0078] After receiving the first scheduling instruction in step S204, the first server 302 responds to the first scheduling instruction in steps S205-S206 by creating a first connection socket accept to establish a communication connection with the client based on the first connection socket accept.

[0079] According to the embodiments of this application, in scenarios of medical image data visualization based on a cloud platform, when faced with connection requests from multiple clients, load balancing is achieved through a front-end server, which rationally schedules the first back-end server to establish communication connections with the clients, thereby processing the data sent by the clients. Based on the collaboration between the front-end server and the first back-end server, the pressure on the back-end for medical image data processing can be reduced in high-concurrency data processing scenarios, enhancing network processing capabilities, alleviating the resource pressure on individual servers, and improving the overall system service performance.

[0080] In some embodiments, to improve data processing efficiency, a separate process and processor can be allocated to each client accessing the first server for data processing. Specifically, in this embodiment, after step S206, the method may further include steps S207 to S209:

[0081] S207 receives an identity message sent by the client, which includes the client's identity information;

[0082] S208 calls the first process from the process pool and associates the first process with the identity information;

[0083] S209 receives the first data sent by the client through the first process, and processes the first data through the first process.

[0084] For example, the client's identity information may include the client's network address (Internet Protocol, IP) and the client's identity document (ID).

[0085] In this embodiment, reference Figure 3As shown, the first server 301 is equipped with multiple Graphics Processing Units (GPUs) 305 and deploys the asynchronous event-driven library libhv to the interface. The libhv library has a main process responsible for creating an accept statement for each communication connection, thus establishing the communication connection between the client and the server. In step S207, for each created connection, the first server 302 can receive an identity message sent by the corresponding client based on the libhv library's main process. Then, through steps S208-S209, the first server 302 calls a separate process 304 (i.e., the first process) from the process pool to respond to the client's request, records the client's identity information, associates this identity information with the first process 304, and then receives the first data sent by the client through the first process 304. In this example, the first server 302 copies the upper and lower layer information of the newly created socket accept statement to the first process according to the identity information, processes subsequent connection message processing logic, and disconnects the socket accept statement when the process is in a waiting state. The first server 302 can also control the first process to call one of multiple GPUs, and use that GPU to perform individual calculations on the received first data, and finally complete the volume and surface rendering of DICOM, and return the processing results to the client for visualization on the client's page.

[0086] According to the embodiments of this application, the first server can associate the identity information sent by the client with the invoked first process. In high-concurrency data processing scenarios, this allows for the allocation of a separate process to handle the client's DICOM, improving the efficiency of data processing for each client. Furthermore, based on the association between the client and the process, steps S201-S203 can be executed even if communication is interrupted. After communication with the client is restored, the process can be re-associated with the client to continue processing its DICOM, thereby reducing user operations and improving data processing efficiency.

[0087] In some embodiments, to ensure accurate connection to the first server after a client disconnects and re-initiates a connection request, a second server can redirect the client's re-initiated connection request. Specifically, in this embodiment, after step S202, the method may further include S210-S211:

[0088] S210 receives a second scheduling instruction sent by a second server within a first time period. The second scheduling instruction is generated based on a second request sent by a client, and the second request includes the client's identity information.

[0089] S211 responds to the second scheduling instruction by creating a second connection socket and establishing a communication connection with the client.

[0090] The second scheduling instruction is generated based on the identity information to determine the historical communication connections established between the first server and the client.

[0091] In this embodiment, the first duration can be a preset duration, such as one hour. Within the first duration, if the client initiates another WebSocket connection request (i.e., the second request), the second server can determine, based on the identity information included in the second request, whether the client has previously established a communication connection with the backend server, and which server it has established a connection with.

[0092] If the second server determines, based on the identity information, that the first server and the client have a history of communication connections, then it generates a second scheduling instruction based on the second request.

[0093] During the execution of step S210, after the first server receives the second scheduling instruction within the first time period, it can execute step S211. In response to the second scheduling instruction, it creates a second connection socket accept in the accept queue and establishes a communication connection with the client through the new accept.

[0094] According to the embodiments of this application, when a client disconnects from the first server and initiates a connection request again, load balancing is not required. Instead, the client is directly redirected to the first server via the second server, ensuring that the client can still accurately connect to the first server it previously connected to. This guarantees that after the communication connection is restored, the client can accurately return to the previously bound first process and continue processing the first data based on the data records retained on that first process, thereby improving data processing efficiency.

[0095] For example, in this embodiment, in order to accurately return to the previously bound first process according to the client's request, after step S211, the method may further include:

[0096] S212, upon re-establishing a communication connection with the client, locates the associated first process based on the identity information;

[0097] S213 If the first process being searched is in a waiting state, control the first process to transition from the waiting state to the running state;

[0098] S214 continues processing the first data through the first process.

[0099] In this embodiment, the second request sent by the client includes identity information. The first server can obtain the identity information from the second scheduling instruction of the second server. Based on the association between the identity information and the first process, the first process associated with the identity information is searched from the process pool through step S212.

[0100] Since the first process is in a waiting state during the first time period and has not finished exiting memory occupation, during the execution of steps S213 to S214, the first server controls the first process to switch from the waiting state to the running state, and continues to process the first data by checking the processing progress when the communication interruption occurred.

[0101] According to the embodiments of this application, based on the association between the client's identity information and the first process, it can be ensured that after the communication connection is restored, the client can still accurately return to the first process in the first server and continue to process the first data, thereby improving data processing efficiency.

[0102] In some embodiments, if the client is disconnected from the first server for a long period of time, to avoid wasting system resources, in this embodiment, after the disconnection time exceeds a certain period, the association between the client and the process is unbound, so that the server can be reassigned to the client for the next connection. Specifically, in this embodiment, after step S201, the method may further include:

[0103] S215, when the communication connection with the client is interrupted and the interruption duration exceeds the first duration, saves the processing data of the first data through the first process;

[0104] S216 controls the first process to transfer to the terminated state so that, in the event that a communication connection is re-established with the client, the second process can read the processing data of the first data.

[0105] In this embodiment, if the communication connection between the first server and the client is interrupted, and the interruption duration exceeds a certain time limit, to avoid the first process occupying memory for an extended period and wasting resources, in step S215, the first process can save the processed data of the first data to a preset database (Data Base, DB), such as a background DB. This background DB is the database of all first servers in the same system. The processed data may include the processing progress of the first data and the processing result corresponding to the communication interruption. After saving the processed data of the first data, the first server can execute step S216 to control the first process to transition to the terminated state. The first process exits and becomes idle in the process pool for later use. Simultaneously, the background DB saves the processed data of the first data. When the client re-establishes a connection with any of the first servers, the processed data of the first data can be read through the corresponding process (i.e., the second process), thus allowing the client to recreate the visual display at the time of the interruption.

[0106] In a specific example, when the communication interruption between the client and the first server exceeds a certain duration, after the client re-initiates a connection request, the second server can use any of the following load balancing schemes: round-robin, weight comparison, ip_hash algorithm mapping, least connections, third-party fair plugin, etc., to load balance among multiple first servers in the background, allocate the first server with better running status, generate a third scheduling instruction corresponding to the first server based on the first request, and send it to the first server.

[0107] In this example, the method is illustrated by the scenario where, when the client re-establishes a communication connection, any of the first servers assigned by the second server are still the same first servers the client was connected to before the communication interruption. Specifically, in this example, the method may further include:

[0108] If the first time period is exceeded, S217 receives a third scheduling instruction sent by the second server. The third scheduling instruction is generated based on the second request sent by the client, and the second request includes the client's identity information.

[0109] S218 responds to the third scheduling instruction and creates a third connection socket;

[0110] S219 establishes a communication connection with the client based on the third connection socket;

[0111] S220 calls a second process from the process pool and associates the second process with the identity information;

[0112] S221 receives the second data sent by the client through the second process, and processes the second data through the second process.

[0113] In this example, if the first timeout period is exceeded, the second server generates a third scheduling instruction based on the second request sent by the client and sends it to the first server. After receiving the third scheduling instruction, the first server executes S218-S219, and in response to the third scheduling instruction, recreates the connection socket (i.e., the third connection socket) accept, and re-establishes the communication connection with the client.

[0114] During the execution of S220 on the first server, any idle second process can be called from the process pool. This second process belongs to the same process pool as the first process. After calling the second process, the client's identity information is associated with the second process.

[0115] During step S221, the first server can receive second data sent by the client through the second process, and process the second data through the second process. This second data may be a new DICOM sent by the client. In this case, the second process can process only the second data to return the processing result of the new DICOM to the client for visualization.

[0116] To meet users' more diverse data processing needs, such as wanting to restore the original DICOM processing data after reconnecting to the first server, the method in this example may also include:

[0117] S222, when re-establishing a communication connection with the client and before receiving the second data sent by the client through the second process, determines the processing data of the corresponding first data based on the client's identity information;

[0118] S223 reads the processing data of the first data through the second process to restore the processing progress information of the first data.

[0119] In this example, if, upon re-establishing a communication connection with the client, the user does not send a new DICOM to the first server through the client, but instead attempts to restore the original data, step S222 can be executed. During the execution of step S222, the second process can query the processing data of the corresponding client's first data from the background DB based on the client's identity information.

[0120] Then, step S223 is executed, in which the processing data of the first data is read through the second process to restore the processing progress of the first data, the first data is processed from the processing progress, and the processing result is returned to the client for visualization.

[0121] According to the embodiments of this application, even if the communication interruption between the client and the first server is prolonged, when the client re-establishes a connection with any first server, the relevant processing data stored in the database can be read again by the process to restore the processing progress before the communication interruption. Compared with the shared memory method in related technologies, the embodiments of this application do not require inter-process communication. Based on the client's identity information, a new process can find the processing data of the first data and continue processing. Thus, compared with the shared memory method in related technologies, the embodiments of this application reduce the resource consumption of the entire system, which is beneficial to improving data processing performance and thus improving data processing efficiency.

[0122] The above text combines Figure 2 and Figure 3 The data processing method according to the embodiments of this application is described in detail below, in conjunction with Figure 4 The apparatus of the embodiments of this application is described in detail below.

[0123] Figure 4 A schematic diagram of a data processing apparatus according to an embodiment of this application is shown. This apparatus is applied to a first server, such as... Figure 4 As shown, the device 400 includes:

[0124] The first processing module 401 is used to process the first data transmitted by the client through the first process during the process of establishing a communication connection with the client. The first process is associated with the client.

[0125] The first control module 402 is used to control the first process to transfer to a waiting state within a first duration in the event that the communication connection with the client is interrupted.

[0126] The second control module 403 is used to control the first process to switch to the running state and continue processing the first data when the communication connection with the client is re-established and the first process is in a waiting state.

[0127] According to an embodiment of this application, during the process of establishing a communication connection with the client, the first server processes the first data transmitted by the client through a first process and associates the first process with the client. Then, if the communication connection between the first server and the client is interrupted, the first process is controlled to transfer to a waiting state within a first time period. Upon re-establishing the communication connection with the client, and with the first process still in a waiting state, since the first process is associated with the client, it can be directly controlled to transfer to a running state to continue processing the first data. Thus, during the processing of medical imaging data (Digital Imaging and Communications in Medicine, DICOM) transmitted by the client through the server, if the connection between the server and the client is interrupted, it can be restored by reconnecting and returning to the original process to continue processing the client's medical imaging data. This embodiment can reduce the operations performed by the user when the communication between the client and the server is interrupted (such as resending image data in addition to re-establishing the connection), saving processing time for medical imaging data and thus improving the processing efficiency of medical imaging data.

[0128] In this embodiment of the application, the first process may be one of the processes in a process pool created by the server, and the processes in the process pool may execute concurrent tasks.

[0129] In some embodiments, to improve data processing efficiency, the first server can be used as a backend application server, accepting scheduling from the frontend server, and processing client data through the first processing module 401, the first control module 402, and the second control module 403. Specifically, in this embodiment, the apparatus may further include:

[0130] The first receiving module is used to receive a first scheduling instruction from the second server, wherein the first scheduling instruction is generated based on a first request sent by the client.

[0131] The first creation module is used to create the first connection socket in response to the first scheduling instruction;

[0132] The first establishment module is used to establish a communication connection with the client based on the first connection socket.

[0133] In this embodiment, the second server acts as a front-end server, capable of establishing connections with multiple clients and assigning different first servers as back-end application servers to process the first data. For example, the second server could be an Nginx web server, providing load balancing services to evenly schedule the work of multiple back-end first servers.

[0134] The second server listens in real-time for the first request sent by the client. This first request can be a full-duplex WebSocket request. Upon receiving the first request, the second server can use any of the following load balancing methods—round-robin, weight comparison, IP hash algorithm mapping, least connections, or third-party fair plugins—to load balance among multiple background first servers and allocate the connection to the first server with the best operating status. Therefore, the second server generates a first scheduling instruction based on the first request and sends it to the first server.

[0135] After receiving the first scheduling instruction through the first receiving module, the first server responds to the first scheduling instruction through the first creation module by creating a first connection socket accept, and establishes a communication connection with the client based on the first connection socket accept through the first establishment module.

[0136] According to the embodiments of this application, in scenarios of medical image data visualization based on a cloud platform, when faced with connection requests from multiple clients, load balancing is achieved through a front-end server, which rationally schedules the first back-end server to establish communication connections with the clients, thereby processing the data sent by the clients. Based on the collaboration between the front-end server and the first back-end server, the pressure on the back-end for medical image data processing can be reduced in high-concurrency data processing scenarios, enhancing network processing capabilities, alleviating the resource pressure on individual servers, and improving the overall system service performance.

[0137] In some embodiments, to improve data processing efficiency, a separate process and processor can be allocated to each client accessing the first server for data processing. Specifically, in this embodiment, the apparatus may further include:

[0138] The second receiving module is used to receive the identity message sent by the client, which includes the client's identity information;

[0139] The first calling module is used to call the first process from the process pool and associate the first process with identity information;

[0140] The third receiving module is used to receive the first data sent by the client through the first process, so as to process the first data through the first process.

[0141] For example, the client's identity information may include the client's network address (Internet Protocol, IP) and the client's identity document (ID).

[0142] In this embodiment, the first server has multiple Graphics Processing Units (GPUs) and deploys the asynchronous event-driven library libhv to the interface. A main process within libhv is responsible for creating an `accept` statement for each communication connection, establishing the communication connection between the client and server. For each created connection, the second receiving module can receive an identity message sent by the corresponding client based on the libhv main process. Then, the first calling module calls a separate process (the first process) from the process pool to respond to the client's request, records the client's identity information, and associates this identity information with the first process. The third receiving module then receives the first data sent by the client through the first process. In this example, the first server copies the upper and lower layer information of the newly created socket `accept` to the first process according to the identity information, processes subsequent connection message processing logic, and disconnects the socket `accept` when the process is in a waiting state. The first calling module can also control the first process to call one of the multiple GPUs, which performs individual calculations on the received first data, ultimately completing the volume and surface rendering of DICOM, returning the processing result to the client, and displaying it visually on the client's page.

[0143] According to the embodiments of this application, the first server can associate the identity information sent by the client with the invoked first process. In high-concurrency data processing scenarios, this allows for the allocation of a separate process to handle the client's DICOM, improving the efficiency of data processing for each client. Furthermore, based on the association between the client and the process, in the event of a communication interruption, corresponding operations can be performed through the second receiving module, the first invoking module, and the third receiving module. This ensures that after communication with the client is restored, the process can continue to be associated with the client and process its DICOM, thereby reducing user operations and improving data processing efficiency.

[0144] In some embodiments, to ensure accurate connection to the first server after a client disconnects and re-initiates a connection request, a second server can redirect the client's re-initiated connection request. Specifically, in this embodiment, the apparatus may further include:

[0145] The fourth receiving module is used to receive a second scheduling instruction sent by the second server within a first time period. The second scheduling instruction is generated based on a second request sent by the client, and the second request includes the client's identity information.

[0146] The second creation module is used to create a second connection socket in response to the second scheduling instruction and establish a communication connection with the client;

[0147] The second scheduling instruction is generated based on the identity information to determine the historical communication connections established between the first server and the client.

[0148] In this embodiment, the first duration can be a preset duration, such as one hour. Within the first duration, if the client initiates another WebSocket connection request (i.e., the second request), the second server can determine, based on the identity information included in the second request, whether the client has previously established a communication connection with the backend server, and which server it has established a connection with.

[0149] If the second server determines, based on the identity information, that the first server and the client have a history of communication connections, then it generates a second scheduling instruction based on the second request.

[0150] After the fourth receiving module receives the second scheduling instruction within the first time period, the second creation module can respond to the second scheduling instruction by creating a second connection socket accept from the accept queue and establishing a communication connection with the client through the new accept.

[0151] According to the embodiments of this application, when a client disconnects from the first server and initiates a connection request again, load balancing is not required. Instead, the client is directly redirected to the first server via the second server, ensuring that the client can still accurately connect to the first server it previously connected to. This guarantees that after the communication connection is restored, the client can accurately return to the previously bound first process and continue processing the first data based on the data records retained on that first process, thereby improving data processing efficiency.

[0152] For example, in this embodiment, in order to accurately return to the previously bound first process according to the client's request, the device may further include:

[0153] The lookup module is used to locate the first associated process based on identity information when a communication connection is re-established with the client.

[0154] The third control module is used to control the first process to switch from the waiting state to the running state when the first process being searched is in a waiting state.

[0155] The second processing module is used to continue processing the first data through the first process.

[0156] In this embodiment, the second request sent by the client includes identity information. The first server can obtain the identity information from the second scheduling instruction of the second server. Based on the association between the identity information and the first process, the first process associated with the identity information is searched from the process pool by the step search module.

[0157] Since the first process is in a waiting state and has not finished exiting memory occupation during the first time period, the third control module controls the first process to switch from the waiting state to the running state. Then, the second processing module continues to process the first data based on the processing progress when the communication interruption occurred.

[0158] According to the embodiments of this application, based on the association between the client's identity information and the first process, it can be ensured that after the communication connection is restored, the client can still accurately return to the first process in the first server and continue to process the first data, thereby improving data processing efficiency.

[0159] In some embodiments, if the client is disconnected from the first server for a long period of time, to avoid wasting system resources, in this embodiment, after the disconnection time exceeds a certain period, the association between the client and the process is unbound, so that the server can be reassigned to the client for the next connection. Specifically, in this embodiment, the apparatus may further include:

[0160] The storage module is used to save the processed data of the first data through the first process when the communication connection with the client is interrupted and the interruption time exceeds the first time duration.

[0161] The fourth control module is used to control the first process to transition to the terminated state, so that when a communication connection is re-established with the client, the second process can read the processed data of the first data.

[0162] In this embodiment, if the communication connection between the first server and the client is interrupted, and the interruption duration exceeds a certain time limit, to avoid the first process occupying memory for an extended period and wasting resources, the storage module can save the processed data of the first data to a preset database (Data Base, DB), such as a background DB, through the first process. This background DB is the database of all first servers in the same system. The processed data may include the processing progress of the first data and the processing results corresponding to the communication interruption. After saving the processed data of the first data, the fourth control module controls the first process to transition to the terminated state, the first process exits, and becomes idle in the process pool for later recall. Simultaneously, the background DB stores the processed data of the first data, allowing the client to retrieve the processed data through the corresponding process (i.e., the second process) when it re-establishes a connection with any of the first servers, thus restoring the visual display at the time of the interruption on the client.

[0163] In a specific example, when the communication interruption between the client and the first server exceeds a certain duration, after the client re-initiates a connection request, the second server can use any of the following load balancing schemes: round-robin, weight comparison, ip_hash algorithm mapping, least connections, third-party fair plugin, etc., to load balance among multiple first servers in the background, allocate the first server with better running status, generate a third scheduling instruction corresponding to the first server based on the first request, and send it to the first server.

[0164] In this example, the scenario is illustrated by the fact that when the client re-establishes a communication connection, any of the first servers assigned by the second server are still the same first servers that the client was connected to before the communication interruption. Specifically, in this example, the apparatus may further include:

[0165] The fifth receiving module is used to receive a second scheduling instruction sent by the second server if the first time period is exceeded. The second scheduling instruction is generated based on a second request sent by the client, and the second request includes the client's identity information.

[0166] The third creation module is used to create a third connection socket in response to a third scheduling instruction;

[0167] The second establishment module is used to establish a communication connection with the client based on the third connection socket;

[0168] The second calling module is used to call the second process from the process pool and associate the second process with identity information;

[0169] The sixth receiving module is used to receive the second data sent by the client through the second process, so as to process the second data through the second process.

[0170] In this example, if the first timeout period is exceeded, the second server generates a third scheduling instruction based on the second request sent by the client and sends it to the first server. Upon receiving the third scheduling instruction, the first server, through the third creation module, responds by recreating a connection socket (i.e., the third connection socket) `accept`, and the second establishment module re-establishes the communication connection with the client. Then, the second calling module can call any idle second process from the process pool; this second process belongs to the same process pool as the first process. After calling the second process, the client's identity information is associated with it. The sixth receiving module can receive the second data sent by the client through the second process and process it. This second data can be a new DICOM sent by the client; in this case, the second process can only process the second data to return the processing result of the new DICOM to the client for visualization.

[0171] To meet users' more diverse data processing needs, such as wanting to restore the original DICOM processing data after reconnecting to the first server, the device in this example may further include:

[0172] The determination module is used to determine the processing data of the corresponding first data based on the client's identity information when a communication connection is re-established with the client and before receiving the second data sent by the client through the second process;

[0173] The reading module is used to read the processed data of the first data through the second process in order to restore the processing progress information of the first data.

[0174] In this example, if, upon re-establishing a communication connection with the client, the user does not send a new DICOM to the first server through the client but instead requests to restore the original data, the determination module can use the second process to query the corresponding client's first data processing data from the background database based on the client's identity information. Then, the reading module reads the first data processing data through the second process to restore the processing progress of the first data, continues processing the first data from that progress, and returns the processing result to the client for visualization.

[0175] According to the embodiments of this application, even if the communication interruption between the client and the first server is prolonged, when the client re-establishes a connection with any first server, the relevant processing data stored in the database can be read again by the process to restore the processing progress before the communication interruption. Compared with the shared memory method in related technologies, the embodiments of this application do not require inter-process communication. Based on the client's identity information, a new process can find the processing data of the first data and continue processing. Thus, compared with the shared memory method in related technologies, the embodiments of this application reduce the resource consumption of the entire system, which is beneficial to improving data processing performance and thus improving data processing efficiency.

[0176] Figure 5 A schematic diagram of the hardware structure of a server provided in an embodiment of this application is shown.

[0177] like Figure 5 As shown, server 500 may include processor 501 and memory 502 storing computer program instructions.

[0178] Specifically, the processor 501 may include a central processing unit (CPU), an application-specific integrated circuit (ASIC), or one or more integrated circuits that can be configured to implement the embodiments of this application.

[0179] Memory 502 may include mass storage for data or instructions. For example, and not limitingly, memory 502 may include a hard disk drive (HDD), floppy disk drive, flash memory, optical disk, magneto-optical disk, magnetic tape, or Universal Serial Bus (USB) drive, or a combination of two or more of these. Where appropriate, memory 502 may include removable or non-removable (or fixed) media. Where appropriate, memory 502 may be internal or external to the integrated gateway disaster recovery device. In a particular embodiment, memory 502 is non-volatile solid-state memory.

[0180] Memory may include read-only memory (ROM), random access memory (RAM), disk storage media devices, optical storage media devices, flash memory devices, and electrical, optical, or other physical / tangible memory storage devices. Therefore, typically, memory includes one or more tangible (non-transitory) computer-readable storage media (e.g., memory devices) encoded with software including computer-executable instructions, and when the software is executed (e.g., by one or more processors), it is operable to perform the operations described with reference to the methods in any of the above embodiments of this application.

[0181] The processor 501 implements any of the data processing methods described in the above embodiments by reading and executing computer program instructions stored in the memory 502.

[0182] In one example, the server 500 may also include a communication interface 503 and a bus 510. Wherein, as... Figure 5 As shown, the processor 501, memory 502, and communication interface 503 are connected through bus 510 and complete communication with each other.

[0183] The communication interface 503 is mainly used to realize communication between various modules, devices, units and / or equipment in the embodiments of this application.

[0184] Bus 510 includes hardware, software, or both, that couples components of server 500 together. For example, and not limitingly, the bus may include an Accelerated Graphics Port (AGP) or other graphics bus, an Enhanced Industry Standard Architecture (EISA) bus, a Front Side Bus (FSB), HyperTransport (HT) interconnect, an Industry Standard Architecture (ISA) bus, an Infinite Bandwidth Interconnect, a Low Pin Count (LPC) bus, a memory bus, a Microchannel Architecture (MCA) bus, a Peripheral Component Interconnect (PCI) bus, a PCI-Express (PCI-X) bus, a Serial Advanced Technology Attachment (SATA) bus, a Video Electronics Standards Association Local (VLB) bus, or other suitable buses, or combinations of two or more of these. Where appropriate, bus 510 may include one or more buses. Although specific buses are described and illustrated in embodiments of this application, any suitable bus or interconnect is contemplated herein.

[0185] Furthermore, in conjunction with the data processing methods in the above embodiments, this application embodiment can provide a data processing system for implementation. The system also includes the server 500 in the above embodiments, which can be an application server, and may also include a website server.

[0186] A website server is used to generate scheduling instructions based on requests sent by clients and send them to the application server so that the application server can implement the data processing method as described in any of the above embodiments.

[0187] Furthermore, in conjunction with the data processing methods described in the above embodiments, this application embodiment can provide a computer storage medium for implementation. This computer storage medium stores computer program instructions; when these computer program instructions are executed by a processor, they implement any of the data processing methods described in the above embodiments.

[0188] In addition, in conjunction with the data processing methods in the above embodiments, this application embodiment can also provide a computer program product, wherein when the instructions in the computer program product are executed by the processor of an electronic device, the electronic device performs any of the data processing methods in the embodiments.

[0189] It should be clarified that this application is not limited to the specific configurations and processes described above and shown in the figures. For the sake of brevity, detailed descriptions of known methods are omitted here. In the above embodiments, several specific steps are described and shown as examples. However, the method process of this application is not limited to the specific steps described and shown. Those skilled in the art can make various changes, modifications, and additions, or change the order of steps, after understanding the spirit of this application.

[0190] The functional modules shown in the above-described block diagram can be implemented as hardware, software, firmware, or a combination thereof. When implemented in hardware, they can be, for example, electronic circuits, application-specific integrated circuits (ASICs), appropriate firmware, plug-ins, function cards, etc. When implemented in software, the elements of this application are programs or code segments used to perform the required tasks. Programs or code segments can be stored on a machine-readable medium or transmitted over a transmission medium or communication link via data signals carried on a carrier wave. "Machine-readable medium" can include any medium capable of storing or transmitting information. Examples of machine-readable media include electronic circuits, semiconductor memory devices, ROM, flash memory, erasable ROM (EROM), floppy disks, CD-ROMs, optical disks, hard disks, fiber optic media, radio frequency (RF) links, etc. Code segments can be downloaded via computer networks such as the Internet, intranets, etc.

[0191] It should also be noted that the exemplary embodiments mentioned in this application describe methods or systems based on a series of steps or apparatus. However, this application is not limited to the order of the above steps; that is, the steps can be performed in the order mentioned in the embodiments, or in a different order, or several steps can be performed simultaneously.

[0192] The aspects of this application have been described above with reference to flowchart illustrations and / or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of this application. It should be understood that each block in the flowchart illustrations and / or block diagrams, and combinations of blocks in the flowchart illustrations and / or block diagrams, can be implemented by computer program instructions. These computer program instructions can be provided to a processor of a general-purpose computer, a special-purpose computer, or other programmable data processing apparatus to produce a machine such that these instructions, executable via the processor of the computer or other programmable data processing apparatus, enable the implementation of the functions / actions specified in one or more blocks of the flowchart illustrations and / or block diagrams. Such a processor can be, but is not limited to, a general-purpose processor, a special-purpose processor, a special application processor, or a field-programmable logic circuit. It is also understood that each block in the block diagrams and / or flowcharts, and combinations of blocks in the block diagrams and / or flowcharts, can also be implemented by dedicated hardware performing the specified functions or actions, or can be implemented by a combination of dedicated hardware and computer instructions.

[0193] The above description is merely a specific implementation of this application. Those skilled in the art will clearly understand that, for the sake of convenience and brevity, the specific working processes of the systems, modules, and units described above can be referred to the corresponding processes in the foregoing method embodiments, and will not be repeated here. It should be understood that the protection scope of this application is not limited thereto. Any person skilled in the art can easily conceive of various equivalent modifications or substitutions within the technical scope disclosed in this application, and these modifications or substitutions should all be covered within the protection scope of this application.

Claims

1. A data processing method, characterized in that, Applied to a first server, the method includes: During the process of establishing a communication connection with the client, the first process processes the first data transmitted by the client, and associates the identity information sent by the client with the first process, and the first process associates the client; In the event of an interruption of communication with the client, the first process is controlled to switch to a waiting state for a first period of time, while the processing progress of the first process is retained. If a communication connection is re-established with the client and the first process is in the waiting state, the first process is controlled to switch to the running state and continue processing the first data according to the processing progress of the first process. When a communication connection is re-established with the client and the first process is in a waiting state, controlling the first process to switch to a running state and continue processing the first data includes: Within the first time period, a second scheduling instruction sent by a second server is received. The second scheduling instruction is generated based on a second request sent by the client. The second request includes the client's identity information. The second scheduling instruction is generated by the second server after determining, based on the identity information, that the first server and the client have a history of communication connections. If a communication connection is re-established with the client, the associated first process is located based on the identity information, wherein the identity information is obtained from the identity information in the second scheduling instruction of the second server; If the first process being searched is in a waiting state, control the first process to switch from the waiting state to the running state, and continue processing the first data through the first process.

2. The method according to claim 1, characterized in that, Before processing the first data transmitted by the client through the first process, the method further includes: Receive a first scheduling instruction from the second server, wherein the first scheduling instruction is generated based on a first request sent by the client; In response to the first scheduling instruction, a first connection socket is created; A communication connection is established with the client based on the first connection socket.

3. The method according to claim 2, characterized in that, After establishing a communication connection with the client based on the first connection socket, the method further includes: Receive an identity message sent by a client, wherein the identity message includes the client's identity information; The first process is invoked from the process pool, and the first process is associated with the identity information; The first process receives the first data sent by the client and processes the first data.

4. The method according to claim 3, characterized in that, After controlling the first process to transfer to a waiting state within the first time period, the method further includes: Within the first time period, a second scheduling instruction sent by a second server is received. The second scheduling instruction is generated based on a second request sent by the client, and the second request includes the client's identity information. In response to the second scheduling instruction, a second connection socket is created to establish a communication connection with the client.

5. The method according to claim 2, characterized in that, After processing the first data transmitted by the client through the first process, the method further includes: If the communication connection with the client is interrupted and the interruption duration exceeds the first duration, the first process saves the processing data of the first data. The first process is controlled to transition to an terminated state so that, in the event of a renewed communication connection with the client, the second process can read the processed data of the first data.

6. The method according to claim 5, characterized in that, Before reading the processed data of the first data through the second process upon re-establishing a communication connection with the client, the method further includes: If the first time period is exceeded, a third scheduling instruction sent by a second server is received. The third scheduling instruction is generated based on a second request sent by the client, and the second request includes the client's identity information. In response to the third scheduling instruction, a third connection socket is created; A communication connection is established with the client based on the third connection socket; The second process is invoked from the process pool, and then associated with the identity information. The second process receives the second data sent by the client and processes the second data.

7. The method according to claim 6, characterized in that, The step of reading the first data through a second process when re-establishing a communication connection with the client includes: If a communication connection is re-established with the client, and before receiving the second data sent by the client through the second process, the corresponding processing data for the first data is determined based on the client's identity information; The second process reads the processed data of the first data to restore the processing progress of the first data.

8. A data processing apparatus, characterized in that, Applied to a first server, the device includes: The first processing module is used to process the first data transmitted by the client through a first process during the process of establishing a communication connection with the client, wherein the first process is associated with the client; The first control module is used to control the first process to transfer to a waiting state for a first period of time and retain the processing progress of the first process when the communication connection with the client is interrupted. The second control module is configured to, when a communication connection is re-established with the client and the first process is in a waiting state, control the first process to transition to a running state and continue processing the first data according to the processing progress of the first process. It is also configured to, within the first duration, receive a second scheduling instruction sent by a second server, the second scheduling instruction being generated based on a second request sent by the client, wherein the second request includes the client's identity information, and the second scheduling instruction being generated by the second server after determining, based on the identity information, that the first server and the client have a historical communication connection. When a communication connection is re-established with the client, the module searches for the associated first process based on the identity information, wherein the identity information is obtained from the identity information in the second scheduling instruction from the second server. If the searched first process is in a waiting state, the module controls the first process to transition from the waiting state to a running state, and continues processing the first data through the first process.

9. The apparatus according to claim 8, characterized in that, The device further includes: A storage module is used to save the processed data of the first data through the first process when the communication connection with the client is interrupted and the interruption duration exceeds the first duration. The fourth control module is used to control the first process to transfer to the terminated state so that, when a communication connection is re-established with the client, the second process can read the processed data of the first data.

10. A server, characterized in that, The server includes: a processor and a memory storing computer program instructions; When the processor executes the computer program instructions, it implements the data processing method as described in any one of claims 1-7.

11. A data processing system comprising the server of claim 10, characterized in that, The server is an application server. The system also includes a website server. The website server is configured to generate a scheduling instruction based on a request sent by the client and send it to the application server so that the application server can implement the data processing method as described in any one of claims 1-7.

12. A computer storage medium, characterized in that, The computer storage medium stores computer program instructions, which, when executed by a processor, implement the data processing method as described in any one of claims 1-7.

13. A computer program product, characterized in that, When the instructions in the computer program product are executed by the processor of the electronic device, the electronic device performs the data processing method as described in any one of claims 1-7.

Citation Information

Patent Citations

  • Data transfer method and a terminal thereof in a network with intermittent connectivity

    KR101007407B1

  • Managing connection failover in a load balancer

    US20150052249A1