Patent Publication Number: US-7219122-B1

Title: Software service handoff mechanism with a performance reliability improvement mechanism (PRIM) for a collaborative client-server system

Description:
CROSS REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit under 35 U.S.C. §119(e) of application No. 60/285,861 filed Apr. 23, 2001 and application No. 60/285,797 filed Apr. 23, 2001. Both of these applications are incorporated herein by reference in their entirety. 
    
    
     STATEMENT REGARDING FEDERALLY SPONSORED RESEARCH 
     This invention was made with government support under Contract No. CMS-987557 awarded by the National Science Foundation. The government has certain rights in this invention. 
    
    
     FIELD OF THE INVENTION 
     This invention relates to client-server systems having a collaboration and in particular to multi-server client-server systems that share data amongst the multi-servers, and to communication link handoff between clients and servers during a collaboration. 
     BACKGROUND OF THE INVENTION 
     Conventional client-server computer systems provide coupling between one or more client computers and a server computer. In such systems, the server computer is provided having server based application programs and a server based storage area that can be used by the one or more client computers. A client computer can access the server based application programs, for example a word processor program, that resides upon the server computer. The client computer can save data, for example a word processor document, to the server based storage area, and can also retrieve the word processor document from the server based storage area. 
     The client computers coupled to the server can also contain client computer based application programs and a client computer based storage area local to each client computer. A client-server computer system can have both server based and client computers based application programs and storage areas. In general, application programs and storage areas that are used by more than one client computer are provided as server based application programs and server based storage areas. Conversely, application programs and a storage area that are used by one client computer are generally provided as client based application programs and a client based storage area in association with the one client computer. 
     Conventional client-server systems can be provided having the one or more client computers and the server coupled with a variety of communication links. When the client computers are in close proximity to the server, for example within a few feet or hundreds of feet, the communication links can be direct wire connections, or line-of-sight radio link connections. When the client computers are remote from the server, for example within many miles, the communication links can include telephone wires, cable TV (CATV) wires, Internet backbone, troposphere, and/or satellite links. There is no limitation as to the physical separation between any of the one or more client computers and the server of a client-server computer system when using a combination of the above links. 
     Conventional client-server computer systems can be provided having the client computers and the server coupled with a variety of electronic communication protocols. For example, TCP/IP is known to be a communication protocol that can send computer information over any of the connections mentioned above. Other protocols, for example Ethernet, can control the distribution of TCP/IP information around a local area network (LAN) of computers. 
     In one conventional embodiment, the client-server configuration is a single-server configuration in which a single server is connected to the one or more client computers in a star configuration. In a star configuration, the server corresponds to the center of the star and the one or more client computers correspond to the points of the star. In another conventional embodiment, a client computer can access a variety of servers upon manual selection by a client computer user. Each such access selection again provides a star configuration in which the newly selected server corresponds to the center of a new star. With a single-server configuration, it will be recognized that if the single server becomes congested, all of the one or more client computers connected to the single server will suffer slow operation. 
     Typical client-server systems provide no real time synchronization of data between the one or more client computers, i.e. no “collaboration” between client computers. In contrast, distributed collaboration systems have been provided that can synchronize real time data display and storage between one or more client computers. For example, collaboration systems are provided that can coordinate an interaction in real time between users of multiple client computers, also called a collaboration session, such that each client computer can display the same data and changes to the data that occur during the interaction and each client computer can remain synchronous with the other client computers. 
     Distributed collaboration systems have been provided by a variety of commercial companies. Manufacturers of software systems include WebEx from WebEx Communications Inc., San Jose, Calif., (www.webex.com), Centra, from Centra Software, Inc., Lexington, Mass., (www.centra.com), PlaceWare from PlaceWare, Inc., Mountain View, Calif., (www.placeware.com), and HelpMeeting from HelpMeeting LLC, Freehold, N.J., (www.helpmeeting.com). It should, however, be recognized that these collaboration systems are still fundamentally single-server systems having star configurations. 
     Collaboration systems, such as those listed above, have been provided having several servers to serve different collaboration sessions, but throughout a given collaboration session, only one server serves a client computer group. Thus, existing collaboration systems are provided having only the single-server configuration in a star configuration for a given collaboration session. 
     When a star configuration is used in a collaboration session, data throughput, both in processing speed and in communication link bandwidth, from a single server to all the client computers coupled thereto in the collaboration session, can deteriorate as the quantity of data to be shared becomes greater. In particular, both application software sharing and video broadcasting from a single server require substantial processing speed and communication link bandwidth. 
     It should be recognized that the client computers, with displays disposed thereupon, can include but are not limited to, desktop computers, laptop computers, personal digital assistants (PDAs), portable telephones, and pagers. Although some of these client computers are computing platforms having low processing speed, when used as client computers in a collaboration session they can depend upon the server for some processing functions. However, single-server architecture may not provide sufficient processing speed for computing platforms that depend upon the server for some processing functions, particularly when then server must service several clients simultaneously. 
     In one conventional embodiment, the communication links between the variety of computing platforms mentioned above and the server are wireless. Wireless communication links are known to have variable bandwidth, unpredictable data error rates including dropouts, and unpredictable ranges. In particular, in some applications, it may be desirable to provide mobile client computers and mobile servers. Exemplary mobile collaboration sessions include disaster relief collaboration session, for example data sharing during earthquake disaster relief, and military data sharing during military operations. In mobile applications such as these, client computers can be provided as PDAs having wireless communication links to one or more servers, and the one or more servers can also be mobile. 
     It would therefore be desirable to provide a collaboration system that has greater processing speed and greater communication link bandwidth than a single-server star configuration. It would be further desirable to provide a system that can tolerate variable bandwidth, unpredictable data error rates including dropouts, and unpredictable ranges of mobile client to server communication links yet maintain data integrity. It would be further desirable to provide a system that can tolerate faults in one or more elements of the system without data loss and without data delay. 
     SUMMARY OF THE INVENTION 
     In accordance with the present invention, the software service handoff mechanism with a performance reliability improvement mechanism (PRIM) for a collaborative client-server system, hereafter referred to as the system, includes a first collaboration server with which first collaboration server information is stored. The system also includes a second collaboration server with which second collaboration information is stored and also with which a portion of the first collaboration server information is stored. The portion of the first collaboration server information is automatically updated to reflect changes to the first collaboration server information. The portion of the first collaboration server information that is stored in association with the second collaboration server can be either a partial or a complete copy of the first collaboration server information. If is a partial copy, other partial copies can be stored in association with yet other collaboration servers. 
     With this particular arrangement, the partial copies of the first collaboration server information provide an automatic backup if the first collaboration server or the first collaboration server information becomes unavailable. 
     In accordance with another aspect of the present invention, the system provides a client computer that can be selectively coupled to one of the first and the second collaboration servers. The selective coupling is automatically determined by the selected collaboration server, based upon a determination of a variety of factors, including the data congestion between the client computer and the selected collaboration server, the processing allocation between the client computer and the selected collaboration server, and the quality of the data link between the client computer and the selected collaboration server, wherein the quality of the data link can be determined, in real time, during and/or before an interaction session. 
     With this particular arrangement, the coupling between a client computer and selected collaboration server can be handed off to another collaboration server during an interaction session upon determination of the factors listed above. In particular, if a collaboration server becomes unavailable, the client computer with which it is coupled can be handed off to another collaboration server without any delay and without any loss of data. 
     In accordance with the present invention, the system provides a collaboration method, including storing first collaboration server information in association with a first collaboration server. The method also includes storing second collaboration information in association with a second collaboration server, and also storing a portion of the first collaboration server information in association with the second collaboration server. The method further includes automatically updating the portion of the first collaboration server information to reflect changes to the first collaboration server information. The portion of the first collaboration server information that is stored in association with the second collaboration server can be either a partial or a complete copy of the first collaboration server information. If is a partial copy, other partial copies can be stored in association with yet other collaboration servers. 
     With this particular arrangement, the partial copies of the first collaboration server information provide an automatic backup if the first collaboration server or the first collaboration server information becomes unavailable. 
     In accordance with another aspect of the present invention, the system provides a collaboration method, including selectively coupling a client computer to one of the first and the second collaboration servers. The method also includes handing off the selected coupling to the other of the first and the second collaboration servers upon automatic determination of a variety of factors, including the data congestion between the client computer and the selected collaboration server, the processing allocation between the client computer and the selected collaboration server, and the quality of the data link between the client computer and the collaboration server, wherein the handing off is done in real time during an interaction session. 
     With this particular arrangement, the coupling between a client computer and a collaboration server coupled thereto can be handed off, during an interaction session, to another collaboration server upon determination of the factors listed above. In particular, if a collaboration server becomes unavailable, the client computer with which it is coupled can be handed off to another collaboration server. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The foregoing features of the invention, as well as the invention itself may be more fully understood from the following detailed description of the drawings, in which: 
         FIG. 1  is a block diagram of an illustrative embodiment of a collaborative client-server system having performance reliability improvement (PRIM) in accordance with this invention; 
         FIG. 2  is a block diagram having further detail of  FIG. 1 , showing an illustrative embodiment of PRIM in accordance with this invention; 
         FIG. 3  is a block diagram showing further detail of  FIG. 1 , showing another illustrative embodiment of PRIM in accordance with this invention; 
         FIG. 4  is a block diagram showing further detail of  FIG. 1 , showing yet another illustrative embodiment of PRIM in accordance with this invention; 
         FIG. 5  is a block diagram of an illustrative embodiment of a collaborative client-server system having service handoff; 
         FIG. 6  is a block diagram of another illustrative embodiment of a collaborative client-server system having service handoff; 
         FIG. 6A  is a map showing physical locations of client computers and servers; 
         FIG. 6B  is a map showing the client computers and the servers of  FIG. 6A , in which a client computer has moved; 
         FIG. 7  is a flow chart showing the process of service handoff of a collaborative client-server system; and 
         FIG. 8  is a flow chart showing further details of the service handoff of  FIG. 7 . 
     
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     Before describing the invention contemplated herein, some introductory concepts and terminology are explained. 
     A “participant” as used herein refers to a user of the conferencing or collaboration system. 
     The term “meeting” as used herein refers to individuals coming together for a common purpose. 
     Similarly, a “session,” as used herein, refers to a time and space in which interaction participants come together for a common purpose. 
     The term “collaboration” as used herein refers to work performed jointly among more than one participant in a meeting, each participant having a client computer for viewing meeting data. Collaboration can be provide, for example, by the system described in U.S. patent application Ser. No. 09/540,947, entitled Collaborative Agent Interaction Control and Synchronization System filed on Mar. 31, 2000, incorporated by reference herein, and assigned to the assignee of the present invention. 
     The term “synchronous” as used herein refers to events happening, existing, or arising at the same time. 
     The term “real time,” as used herein, will be understood to reflect a time that is small. The term will be further described in association with  FIG. 2 . 
     The term “client computer” as used herein refers to processing platforms used by participants, the processing platforms including but not limited to desktop computers, laptop computers, personal digital assistants (PDAs), portable telephones, and pagers. 
     The term “engine” as used herein refers to a portion of software code that performs a function. 
     The term “error correction data” as used herein refers generically to a type of data that corresponds to one of a variety of error correction methods, and that is applied to other data for error correction. 
     Referring now to  FIG. 1 , an illustrative collaborative client-server system  10  includes more than one “server repository,” here server repositories  12   a – 12   c , each of which contains a server data storage area  14   a – 14   c  and a server application  16   a – 16   c  respectively. Each of the server repositories  12   a – 12   c  is coupled to a respective server, here server  18   a – 18   c . Each of the servers  18   a – 18   c  accesses the respective server repository  12   a – 12   c  for volatile and non-volatile data storage in the respective server data storage area  14   a – 14   c . Each of the servers  18   a – 18   c  also runs server applications, here server applications  16   a – 16   c  respectively. The server data storage areas  14   a – 14   c  and the server applications  16   a – 16   c  correspond to data and software that runs in a collaboration session. 
     The respective server data storage areas  14   a – 14   c  and the respective server applications  16   a – 16   c  correspond to data and application software that resides in a memory local to a respective server  18   a – 18   c . However, it will become apparent from the discussion below that, in a collaboration session, the servers  18   a – 18   c  communicate a respective server data storage area  14   a – 14   c  and respective server applications  16   a – 16   c  to others of the servers  18   a – 18   c . Thus, the respective server data storage area  14   a – 14   c  and the respective server applications  16   a – 16   c  are associated with others of the servers  18   a – 18   c  by the collaboration engines  20   a – 20   c.    
     The coupling between each of the server repositories  12   a – 12   c  and the respective server  18   a – 18   c  can be provided in a variety of ways. In one embodiment, each of the server repositories  12   a – 12   c  can be within the respective server  18   a – 18   c , and the coupling can be provided by a standard electronic bus, for example a PCI bus or a SCSI bus. In an alternate embodiment, each of the server repositories  12   a – 12   c  is not within the respective server  18   a – 18   c , but is still locally related to the respective server  18   a – 18   c , and the coupling is provided, for example, as an Ethernet bus. It will be recognized that the coupling between each of the server repositories  12   a – 12   c  and the respective server  18   a – 18   c  can be provided in a variety of ways. 
     Each of the servers  18   a – 18   c  is provided having a collaboration engine, here respective collaboration engine  20   a – 20   c  respectively. Each of the collaboration engines  20   a – 20   c  can be provided as a separate element coupled to the respective server  18   a – 18   c . In an alternate embodiment, each of the collaboration engines  20   a – 20   c  can be provided as an integral element of the respective server  18   a – 18   c . For example, each of the collaboration engines  20   a – 20   c  is provided as a software module integral to the respective server  18   a – 18   c . Each of the collaboration engines  20   a – 20   c  allows the respective server  18   a – 18   c  to share information corresponding to its respective server repository  12   a – 12   c , including information corresponding to its respective server storage data storage area  14   a – 14   c  and to its respective server application  16   a – 16   c . For example, servers  18   a – 18   c  can each access the data corresponding to the server repository  12   a , the server repository  12   b , and the server repository  12   c . In further discussion below, it will be assumed that each of the servers  18   a – 18   c  is provided having a respective integral collaboration engine  20   a – 20   c.    
     Where more than one server can access, and potentially modify, data associated with each other server, rules are used to determine which server can modify the data. For example, such rules can be of a type described in U.S. patent application Ser. No. 09/540,947, entitled Collaborative Agent Interaction Control and Synchronization System filed on Mar. 31, 2000, mentioned above. 
     The coupling among servers  18   a – 18   c  can be provided such that each server  18   a – 18   c  is coupled to each other server  18   a – 18   c  as shown. In an alternate embodiment, the coupling among the servers  18   a – 18   c  can be provided such that server  18   a  is coupled to server  18   b  and the server  18   b  is coupled to the server  18   c  and no direct coupling is provided between the server  18   a  and the server  18   c.    
     The servers  18   a – 18   c  can be coupled in a variety of ways. Where the servers  18   a – 18   c  are locally related to each other, the coupling can be provided, for example, with an Ethernet bus, using the TCP/IP protocol. Where the servers are distant from each other, the coupling can be provided, for example, via the Internet having TCP/IP protocol. It will be recognized that coupling to the internet can be provided in a variety of ways, including the public switched telephone network (PSTN) and a variety of wireless radio frequency (RF) links, including line-of-sight and satellite links. 
     Each server  18   a – 18   c  is coupled to zero or more respective client computers, here each server  18   a – 18   c  is coupled to a respective client computer  24   a – 24   c . For example, server  18   a  can be coupled to one client computer  22   a . The utility of a coupling to zero client computers will be understood in association with  FIGS. 2–6 . Let it suffice here to say that a server  18   a – 18   c , without a coupling to a respective client computer  22   a – 22   c , can be provided for data redundancy only. It should be understood that, where more than one client computer are coupled to a server, for example sever  18   a , the server data storage area, for example the server data storage area  14   a , and the server applications, for example the server application  16   a , are each associated with the more than one client computer. Thus, each of the storage areas  14   a – 14   c  can contain data associated with a plurality of client computers. 
     The coupling between each of the server  18   a – 18   c  and the respective client computer  22   a – 22   c  can be provided in a variety of ways, including, for example, Ethernet where locally related, and Internet where not locally related, including PSTN and RF links. 
     Each of the client computers  22   a – 22   c  is coupled to a respective client computer repository  24   a – 24   c  that provides a respective client computer data storage area  26   a – 26   c  and respective client computer applications  28   a – 28   c . Each of the client computers  22   a – 22   c  can access the respective client computer repository  24   a – 24   c  for volatile and non-volatile data storage associated with the respective client computer data storage area  26   a – 26   c . Each of the client computers  22   a – 22   c  can also run software programs that perform respective client computer applications  28   a – 28   c . In one exemplary embodiment, each of the client computer repositories  24   a – 24   c  corresponds to each respective client computer  22   a – 22   c.    
     As described above, though collaboration, the servers  18   a – 18   c  communicate the respective server data storage areas  14   a – 14   c  and the respective server applications  16   a – 16   c  to others of the servers  18   a – 18   c . Thus, it will be apparent that a client computer, for example the client computer  22   a , can communicate with one or more of the server data storage areas  14   a – 14   c  and one or more of the server applications  16   a – 16   c , wherein the one or more server data storage areas  14   a – 14   c  and the one or more server applications  16   a – 16   c  are associated with a collaboration session. Thus, in one embodiment, each of the client computers  22   a – 22   c  can collaborate in one software application associated with one server, for example, a software application corresponding to the server applications  16   a , associated with the server  18   a . The collaboration is indicated by a phantom border  29 . For example, users of each of the client computers  22   a – 22   c  can run a computer aided design (CAD) program, wherein the CAD program corresponds to a server application  16   a . However, through collaboration provided by the collaboration engines  20   a – 20   c , each of the client computers  22   a – 22   c  can display the same view to the users of each of the client computers  22   a – 22   c . Users of the client computers  22   a – 22   c  can take part in a collaboration session using the CAD program. In this example, each of the servers  18   a – 18   c  and each of the client computers  22   a – 22   c  collaborate in the CAD program, wherein the CAD program corresponds to the server applications  16   a . It will also become apparent from discussion associated with  FIGS. 5 and 6  that a software application, for example the CAD program, associated with the one server can be handed off to another server having a corresponding software application. 
     The coupling between each of the client computers  22   a – 22   c  and the respective client computer repository  24   a – 24   c  can be provided in a variety of ways similar to those described above for the coupling between each of the servers  18   a – 18   c  and the respective server repository  12   a – 12   c . In one exemplary embodiment each of the client computer repositories  24   a – 24   c  are within the respective client computer  22   a – 22   c  and the coupling is provided by a PCI bus. 
     The client computers  22   a – 22   c  can be provided, for example, as desktop computers, laptop computers, personal digital assistants (PDAs), portable telephones, and pagers, or any combination thereof. As some of these client computers are computing platforms having relatively low processing speed, it is desirable that, in some instances, the processing that would normally be done in each of the client computers  22   a – 22   c , can be re-allocated to the respective server  18   a – 18   c . Such re-allocation of processing functions can be provided by the collaboration engines  20   a – 20   c . Information that describes the type of client computer, for example information that describes a PDA, can be provided by the client computer. For example client computer  22   a  can provide identifying information to the respective server  18   a , and the respective collaboration engine  20   a  can receive the information and adjust the processing allocation between the client  22   a  and the server  18   a  accordingly. 
     Referring now to  FIG. 2 , an illustrative example of a multi-server collaborative client-server system  50  includes server repositories, here server repositories  52   a – 52   c , each of which is coupled to a respective server  58   a – 58   c . Each of the server repositories  52   a – 52   c  includes a respective server data storage area  54   a – 54   c  and respective server applications  56   a – 56   c . Each of the servers  58   a – 58   c  contains a respective collaboration engine  60   a – 60   c . The servers  58   a – 58   c  can be provided as the type of servers  18   a – 18   c  shown in  FIG. 1 . The server repositories  52   a – 52   c  can be provided as the type of server repositories  12   a – 12   c  shown in  FIG. 1 . The server data storage areas  54   a – 54   c  can be provided as the type of server data storage areas  14   a – 14   c  shown in  FIG. 1 . Here, however, the server data storage areas  52   a – 52   c  are shown in greater detail. 
     Again, as described above, though collaboration, the servers  58   a – 58   c  communicate the respective server data storage areas  54   a – 54   c  and the respective server applications  56   a – 56   c  to others of the servers  58   a – 58   c . Thus, a client computer (not shown) can communicate with one or more of the server data storage areas  54   a – 54   c  and one or more of the server applications  56   a – 56   c , wherein the one or more server data storage areas  54   a – 54   c  and the one or more server applications  56   a – 56   c  are associated with a collaboration session. The collaboration is indicated by a phantom border  59 . 
     The server data storage area  54   a  includes primary data A  61  corresponding to the server  58   a . The primary data A  61  is generated and provided in association with the server applications  56   a . It should be understood that, as described above, where more than one client computer are coupled to one server, for example server  58   a , the primary data A  61  can correspond to the more than one client computer. 
     The server data storage area  54   a  can also include mirror data B  62 . The mirror data B  62  corresponds to the server  58   b . It should be understood that the mirror data B  62  is provided as a copy of primary data B  63 . It will become apparent from discussion below that this figure corresponds to but one arrangement with which data can be protected against data loss during a collaboration session, wherein the data loss can otherwise occur in a hostile or unstable environment. 
     The server data storage area  54   b  includes primary data B  63 . The primary data B  63  is generated and provided in association with the server applications  56   b . As described above with regard to primary data A  61 , the primary data B  63  can correspond to more than one client computer coupled to the server  58   b.    
     The data storage area  54   b  can also include mirror data A  64 . The mirror data A  64  corresponds to a copy of the primary data A  61  described above. The primary data A  61  within the server repository  52   a  is provided to the server  58   a , thereupon to the collaboration engine  60   a , thereupon to the collaboration engine  60   b , thereupon to the server  58   b , thereupon to the server repository  52   b , and thereupon to the server data storage area  54   b  to provide the mirror data A  64 . Thus, the collaboration engines  60   a ,  60   b  provide a data transfer that automatically creates a mirror copy of primary data associated with one server within the server data storage area of another server. 
     Similarly, the primary data B  63  within the server repository  52   b  is provided to the server  58   b , thereupon to the collaboration engine  60   b , thereupon to the collaboration engine  60   a , thereupon to the server  58   a , thereupon to the server repository  52   a , and thereupon to the server data storage area  54   a  to provide the mirror data B  62  that is a copy of the primary data B  63 . 
     The data storage  54   b  can also include mirror data C  65 . The mirror data C  65  corresponds to the server  58   c . It should understood that the mirror data C  65  is provided as a copy of primary data C  66 , further described below. 
     The data storage area  54   c  contains data including primary data C  66 . The primary data C  66  is generated and provided in association with the server applications  56   c . As described above with regard to primary data A  61 , the primary data C  66  can correspond to more than one client computer coupled to the server  58   c . The primary data C  66  within the server repository  52   c  is provided to the server  58   c , thereupon to the collaboration engine  60   c , thereupon to the collaboration engine  60   b , thereupon to the server  58   b , thereupon to the server repository  52   b , and thereupon to the server data storage area  54   b  to provide the mirror data C  65 . 
     While primary data A  61 , primary data B  63 , and primary data C  66  are shown and described to be associated with the respective mirror data A  64 , mirror data B  62 , and mirror data C  65 , it should be recognized that any number of mirror data copies can be generated with this invention. In an alternate embodiment, mirror data copies of each of the primary data, for example primary data A  61 , can be generated in more than one server data storage area, for example in both data storage area  52   b , as mirror data A  64 , and data storage area  52   c , as mirror data A  67 . In this way, it is possible to have all primary data mirrored to all server data storage areas, and all servers, for example servers  58   a – 58   c , can have direct access to identical and complete data. 
     It should be recognized that the collaboration engines  60   a – 60   c  can provide and alter the mirror data, for example mirror data A  64 , mirror data B  62 , and mirror data C  65 , in real time as the corresponding primary data, for example primary data A  61 , primary data B  63 , and primary data C  66  are provided and changed by the variety of clients (not shown) that are coupled to the servers  58   a – 58   c.    
     It should also be recognized that if primary data is lost, for example if the primary data A  61  is lost, then a mirror data, for example the mirror data A  64  or the mirror data A  67 , can be re-allocated as a new primary data A. 
     The term “real time,” as used herein, will be understood to reflect a time that is generally small. For example, in the example above, the mirror data A  64 , mirror data B  62 , and mirror data C  65  are updated in real time, upon a change of the corresponding primary data. Thus, the update occurs automatically at some small time after a change in the corresponding primary data. The real time can correspond, for example, to the time that it takes a collaboration server to complete a software thread that it is processing. Alternatively, the real time can correspond to the time that it takes a collaboration connection to be established between collaboration engines. It should be understood that the collaboration connection can be temporarily unavailable, due to connection failure, data congestion of the like. However, the update can be queued with other updates so that the update will occur in sequence when the connection is re-established. The term real time, as used herein, reflects a small time, wherein the small time can be extended due to collaboration connection delays. 
     Each of the collaboration engines  60   a – 60   c  allows the respective server  58   a – 58   c  to share information corresponding to its respective server repository  52   a – 52   c , including information corresponding to its respective server data storage area  54   a – 54   c  and to its respective server application  56   a – 56   c . For example, the servers  58   a – 58   c  can each access the primary data A  61 , the primary data B  63  and the primary data C  66 , and each of the servers  58   a – 58   c  can access the mirror data B  62 , the mirror data A  64 , the mirror data C  65 , and the mirror data A  67 , and each of the servers  58   a – 58   c  can access each of the server applications  56   a – 56   c . In further discussion below, it will be assumed that each of the servers  58   a – 58   c  is provided having the respective integral collaboration engine  60   a – 60   c.    
     In general, the mirror data B  62 , mirror data A  64 , mirror data C  65 , and mirror data A  67  are provided as backup to the corresponding primary data A  61 , primary data B  63 , and primary data C  66 . With this particular arrangement, all servers have access to particular data. For example, servers  58   a – 58   c  have access to primary data A  61  and servers  58   a – 58   c  have access to mirror data A  64  that is a copy of primary data A  61 . Here, if any one of the servers  78   a – 78   c  lose communication, malfunction, or otherwise become damaged, all data corresponding to the primary data A  61  can be accessed by another server. If, for example, the server  58   a  malfunctions, causing a loss of the server repository  52   a  having the primary data A  61 , the server  58   b  and the server  58   c  can each access corresponding data as mirror data A  64  or as mirror data A  67 . Either of the mirror data A  64  or the mirror data A  67  can then be re-allocated to be a new primary data A. In another example, if the server  58   a  is taken out of service by a power outage or by a military attack, causing the loss of the server repository  52   a  having the primary data A  61 , again the server  58   b  and the server  58   c  can each access corresponding data as mirror data A  64  or as mirror data A  67 . 
     As described above, where more than one server can access, and potentially modify, data associated with other servers, rules are used to determine which server can modify the data. For example, collaboration rules can be of a type described in U.S. patent application Ser. No. 09/540,947, entitled Collaborative Agent Interaction Control and Synchronization System filed on Mar. 31, 2000, mentioned above. 
     Respective ones of the more than one client computer coupled to a server can depend upon the server for some processing functions. Essentially, functions that would otherwise be performed by the client computers, for example client computer  22   a  of  FIG. 1 , and the client computer repository, for example client computer repository  24   a  of  FIG. 1 , can be re-allocated to the server for example server  18   a  of  FIG. 1  corresponding to the server  58   a , and the server repository  52   a . Each of the collaboration engines, for example collaboration engine  60   a , can receive information from the clients (not shown) to which it is coupled, for example information about the type of processing platform, and can also receive information from the server  58   a  about the loading, i.e. the amount of processing, ongoing within the server  58   a . With this information, the collaboration engine, for example collaboration engine  60   a , can generate an allocation of processing load between the clients (not shown) and the server  58   a.    
     Thus, the collaboration engines  60   a – 60   c  can provide at least two functions. Each of the collaboration engines  60   a – 60   c  can generate mirror data to one or more server data storage areas  54   a – 54   c  and they can allocate processing among clients (not shown) and respective servers  58   a – 58   c . Both of these functions correspond to a performance reliability improvement (PRIM) for reasons to be further explained below. 
     Referring now to  FIG. 3 , another illustrative example of a multi-server collaborative client-server system  70  includes server repositories, here server repositories  72   a – 72   c , each of which is coupled to a respective server  78   a – 78   c . Each of the server repositories  72   a – 72   c  includes a respective server data storage area  74   a – 74   c  and respective server applications  76   a – 76   c . Each of the servers  78   a – 78   c  contains a respective collaboration engine  80   a – 80   c . The servers  78   a – 78   c  can be provided as the type of servers  18   a – 18   c  shown in  FIG. 1 . The server repositories  72   a – 72   c  can be provided as the type of server repositories  12   a – 12   c  shown in  FIG. 1 . Server data storage areas  74   a – 74   c  can also be provided as the type of server repositories  14   a – 14   c  shown in  FIG. 1 . Here, however, the server data storage areas  72   a – 72   c  are shown in greater detail. Server applications  76   a – 76   c  can also be provided as the type of server applications  16   a – 16   b  shown in  FIG. 1 . 
     Again, as described above, though collaboration, the servers  78   a – 78   c  communicate the respective server data storage areas  74   a – 74   c  and the respective server applications  76   a – 76   c  to others of the servers  78   a – 78   c . Thus, a client computer (not shown) can communicate with one or more of the server data storage areas  74   a – 74   c  and one or more of the server applications  76   a – 76   c , wherein the one or more server data storage areas  74   a – 74   c  and the one or more server applications  76   a – 76   c  are associated with a collaboration session. The collaboration is indicated by a phantom border  79 . 
     In this embodiment, the server data storage area  74   a  includes primary data A  82 , stripe data Ba  84 , and stripe data Cb  86 . The primary data A  82  corresponds to the server  78   a . The primary data A  82  is generated and provided in association with the server applications  76   a . It should be understood that, as described above, where more than one client computer are coupled to one server, for example, server  78   a , the primary data A  82  can correspond to the more than one client computer. 
     The data storage area  74   a  can also include stripe data Ba  84 . The stripe data Ba  84  corresponds to the server  78   b . It should understood that the stripe data Ba  84  is provided as a first partial copy of primary data B  88 , further described below. The data storage area  74   a  can also include stripe data Cb  86 . It should be understood that stripe data Cb  86  is provided as a second partial copy of primary data C  94 , also further described below. 
     The data storage area  74   b  includes primary data B  88 . The primary data B  88  is generated and provided in association with the server applications  76   b . As described above with regard to the primary data A  82 , the primary data B  88  can correspond to more than one client computer coupled to the server  78   b.    
     The data storage area  74   b  can also include stripe data Aa  90 . The stripe data Aa  90  corresponds to a first partial copy of the primary data A  82  described above. A first portion of the primary data A  82  within the server repository  72   a  is provided to the server  78   a , thereupon to the collaboration engine  80   a , thereupon to the collaboration engine  80   b , thereupon to the server  78   b , thereupon to the server repository  72   b , and thereupon to the server data storage area  74   b  to provide the stripe data Aa  90  that is a first partial copy of the primary data A  82 . A second portion of the primary data A  82  within the server repository  72   a  is also provided to the server  78   a , thereupon to the collaboration engine  80   a , thereupon to the collaboration engine  80   c , thereupon to the server  78   c , thereupon to the server repository  72   c , and thereupon to the server data storage area  74   c  to provide stripe data Ab  96  that is a second partial copy of the primary data A  82 . The stripe data Aa  90  in combination with the stripe data Ab  96  provide a complete copy of the primary data A  82 . Thus, the collaboration engines  80   a – 80   c  provide a data transfer that automatically creates stripe copies of primary data associated with one server within the server data storage area of other servers. 
     Similarly, a first portion of the primary data B  88  within the server repository  72   b  is provided to the server  78   b , thereupon to the collaboration engine  80   b , thereupon to the collaboration engine  80   a , thereupon to the server  78   a , thereupon to the server repository  72   a , and thereupon to the server data storage area  74   a  to provide the stripe data Ba  84  that is a first partial copy of the primary data B  88 . A second portion of the primary data B  88  within the server repository  72   b  is also provided to the server  78   b , thereupon to the collaboration engine  80   b , thereupon to the collaboration engine  80   c , thereupon to the server  78   c , thereupon to the server repository  72   c , and thereupon to the server data storage area  74   c  to provide stripe data Bb  98  that is a second partial copy of the primary data B  88 . The stripe data Ba  84  in combination with the stripe data Bb  98  provide a complete copy of the primary data B  88 . 
     The data storage  74   b  can also include stripe data Ca  92 . The stripe data Ca  92  corresponds to the server  78   c . It should understood that the stripe data Ca  92  is provided as a first partial copy of primary data C  94 , further described below. 
     The data storage area  74   c  includes primary data C  94 . The primary data C  94  is generated and provided in association with the server applications  76   c . As described above with regard to primary data A  82 , the primary data C  94  can correspond to more than one client computer coupled to the server  78   c . A first portion of the primary data C  94  within the server repository  72   c  is provided to the server  78   c , thereupon to the collaboration engine  80   c , thereupon to the collaboration engine  80   b , thereupon to the server  78   b , thereupon to the server repository  72   b , and thereupon to the server data storage area  74   b  to provide the stripe data Ca  92  that is the first partial copy of the primary data C  94 . A second portion of the primary data C  94  within the server repository  72   c  is also provided to the server  78   c , thereupon to the collaboration engine  80   c , thereupon to the collaboration engine  80   a , thereupon to the server  78   a , thereupon to the server repository  72   a , and thereupon to the server data storage area  74   a  to provide the stripe data Cb  86  that is the second partial copy of the primary data C  94 . The stripe data Ca  92  in combination with the stripe data Cb  86  provides a complete copy of the primary data C  94 . 
     While primary data A  82 , primary data B  88 , and primary data C  94  are shown and described to be associated with the respective stripe data Aa  90  and stripe data Ab  96 , stripe data Ba  84  and stripe data Bb  98 , and stripe data Ca  92  and stripe data Cb  86 , it should be recognized that any number of stripe data copies can be generated with this invention. Furthermore, each stripe data copy can correspond to any proportion of corresponding primary data. In one embodiment, each of stripe data correspond to one half of the associated primary data. For example, stripe data Aa  90  and stripe data Ab  96  can correspond to one half of the primary data A  82 . In another embodiment, stripe data copies each correspond to one third of the primary data, each provided to one of three server data storage areas (not shown). 
     It should be recognized that the collaboration engines  80   a – 80   c  can create the stripe data in real time as the corresponding primary data, for example primary data A  82 , primary data B  88 , and primary data C  94  are changed by the variety of clients (not shown) that are coupled to the servers  78   a – 78   c . Thus the stripe data taken in combination corresponds to a complete copy of all data in real time. 
     Each of the collaboration engines  80   a – 80   c  allows the respective server  78   a – 78   c  to share information corresponding to its respective server repository  72   a – 72   c , including information corresponding to its respective server storage data storage area  74   a – 74   c  and to its respective server application  76   a – 76   c . For example, the servers  78   a – 78   c  can each access the primary data A  82 , the primary data B  88 , and the primary data C  94 , and each of the servers  78   a – 78   c  can access the stripe data Ba  84 , the stripe data Cb  86 , the stripe data Aa  90 , the stripe data Ca  92 , the stripe data Ab  96 , and the stripe data Bb  98 , and each of the servers  78   a – 78   c  can access each of the server applications  76   a – 76   c . In further discussion below, it will be assumed that each of the servers  78   a – 78   c  are provided having the respective integral collaboration engine  80   a – 80   c.    
     With this particular arrangement, all servers have access to particular data. For example, servers  78   a – 78   c  have access to primary data A  82 , servers  78   a – 78   c  have access to stripe data Aa  90 , and servers  78   a – 78   c  have access to stripe data Ab  96 . Here, if any one of the servers loses communication, malfunctions, or otherwise becomes damaged, all data corresponding to the primary data A  82  can be accessed by a server. For example, if the server  102   a  malfunctions, resulting in the loss of the server repository  72   a  having primary data A  82 , then another server, for example the server  78   b  can recover the data by combining the stripe data Aa  90  with the stripe data Ab  96 . 
     Upon damage to a primary data, corresponding stripe data can be merged to generate a new primary data. For example, if the primary data A  82  is lost due to malfunction, loss of collaboration coupling, or the like, the stripe data Aa  90  and the stripe data Ab  96  can be merged to generate a new primary data A (not shown). The collaborations engines  80   a – 80   c  keep track of the new primary data A and direct the clients accordingly to the new primary data A as if it were the primary data A  82 . 
     As described above, client computers can depend upon the respective server to which they are coupled for some processing functions. Essentially, functions that would otherwise be performed by the client computers (not shown) and the client computer repositories (not shown) can be re-allocated to the respective servers  78   a – 78   c  and the respective server repositories  72   a – 72   c . The collaboration engine, for example collaboration engine  80   a , can receive information from the clients (not shown) to which it is coupled, for example, information about the type of processing platform, and can also receive information from the server  78   a  about the server loading, i.e. the amount of processing, ongoing within the server  78   a . With this information, the collaboration engine, for example, collaboration engine  80   a , can generate an allocation of processing load between the clients (not shown) coupled to the server  78   a  and the server  78   a.    
     Thus, the collaboration engines  80   a – 80   c  can provide at least two functions. The collaboration engines  80   a – 80   c  can generate stripe data Aa and stripe data Ab to server data storage areas  74   a – 74   c  and they can allocate processing between clients (not shown) and the servers  78   a – 78   c . As mentioned above, both of these functions correspond to the performance reliability improvement (PRIM) for reasons to be further explained below. 
     Referring now to  FIG. 4 , in which like elements of  FIG. 3  are shown having like reference designations, another illustrative example of a multi-server collaborative client-server system  100  includes a plurality of server repositories, here server repositories  72   a ,  72   b ,  72   c ,  106 . Each of the server repositories  72   a ,  72   b ,  72   c ,  106  includes a respective server data storage area  74   a ,  74   b ,  74   c ,  108 , and a respective server application  76   a ,  76   b ,  76   c ,  110 . Each of the server repositories  72   a ,  72   b ,  72   c  are coupled to respective servers  102   a – 102   c , each containing a respective collaboration engine  104   a – 104   c . A server repository  106  is coupled to each of the servers  102   a – 102   c . The servers  102   a – 102   c  can be provided as the type of servers  18   a – 18   c  shown in  FIG. 1 . The server repositories  72   a ,  72   b ,  72   c ,  106  can be provided as the type of server repositories  12   a – 12   c  shown in  FIG. 1 . The server data storage areas  74   a – 74   c ,  108  can be provided as the type of server repositories  14   a – 14   c  shown in  FIG. 1 . Here, however, the server data storage areas  74   a – 74   c ,  108  are again shown in greater detail. The server applications  76   a – 76   c ,  110  can also be provided as the type of server applications  16   a – 16   b  shown in  FIG. 1 . 
     Again, as described above, though collaboration, the servers  102   a – 102   c  communicate the respective server data storage areas  74   a – 74   c ,  108  and the respective server applications  76   a – 76   c ,  110  to others of the servers  78   a – 78   c . Thus, a client computer (not shown) can communicate with one or more of the server data storage areas  74   a – 74   c ,  108  and one or more of the server applications  76   a – 76   c ,  110 , wherein the one or more server data storage areas  74   a – 74   c ,  108  and the one or more server applications  76   a – 76   c ,  110  are associated with a collaboration session. The collaboration is indicated by a phantom border  105 . 
     The server data storage areas  74   a – 74   c  include both primary data and stripe data as described above in association with  FIG. 3 . The server repository  106  is provided having error correction data A  112 , error correction data B  114 , and error correction data C  116  associated with primary data A  82 , primary data B  88 , and primary data C  94  respectively. The error correction data A  112 , error correction data B  114 , and error correction data C  116  are generated by collaboration engines  104   a – 104   c  to provide information that can be used to re-generate primary data A  82 , primary data B  88 , and/or primary data C  94  from corresponding stripe data if any one or more of the respective corresponding stripe data Aa  90 , stripe data Ab  96 , stripe data Ba  84 , stripe data Bb  98 , stripe data Ca  92 , stripe data Cb  86  of the corresponding stripe data are lost. Such data loss can be associated with a damaged communication link, with a damaged server  102   a – 102   c , or with a damaged server repository  72   a – 72   c.    
     It should be recognized that the collaboration engines  104   a – 104   c  can create the stripe data and the error correction data in real time as the corresponding primary data, for example primary data A  82 , primary data B  88 , and primary data C  94  are changed by the variety of clients (not shown) that are coupled to the respective servers  102   a – 102   c.    
     Each of the collaboration engines  104   a – 104   c  allows the respective server  102   a – 102   c  to share information corresponding to its respective server repository  72   a – 72   c , including information corresponding to its respective server storage data storage area  74   a – 74   c  and to its respective server application  76   a – 76   c . For example, the servers  102   a – 102   c  can each access the primary data A  82 , the primary data B  88  and the primary data C  94 , and each of the servers  102   a – 102   c  can access the stripe data Ba  84 , the stripe data Cb  86 , the stripe data Aa  90 , the stripe data Ca  92 , the stripe data  96 , and the stripe data Bb  98 , and each of the servers  102   a – 102   c  can access each of the server applications  76   a – 76   c . Each of the servers  102   a – 102   c  can also access the error correcting data A  112 , the error correcting data B  114 , and the error correcting data C  116 . In further discussion below, it will be assumed that each of the servers  102   a – 102   c  are provided having the respective integral collaboration engine  104   a – 104   c.    
     With this particular arrangement, all servers have access to particular data. For example, servers  102   a – 102   c  have access to primary data A  82 , server  102   a – 102   c  have access to stripe data Aa  90 , and servers  102   a – 102   c  have access to stripe data Ab  96 . Here, if any two of the servers loses communication, malfunction, or otherwise become damaged, all data corresponding to the primary data A  82  can be accessed by another server. For example, if the server  102   a  malfunctions, resulting in loss of the server repository  72   a  having the primary data A  82 , and the server  102   b  malfunctions resulting in loss of the server repository  72   b  having the stripe data Aa  90 , then the server  102   c  can recover data corresponding to the primary data A  82  by combining the stripe data Ab  96  with the error correcting data A  112 . 
     Thus, the collaboration engines  104   a – 104   c  can provide at least three functions. The collaboration engines  104   a – 104   c  can generate stripe data to server data storage areas  74   a – 74   c  as described above, collaboration engines  104   a – 104   c  can allocate processing between clients (not shown) and respectively servers  102   a – 102   c  as described above, and collaboration engines  104   a – 104   c  can generate error correction data A  112 , error correction data B  114 , and error correction data C  116 . All of these functions correspond to the performance reliability improvement (PRIM) for reasons to be further explained below. 
     Referring now to  FIG. 5 , in which like elements of  FIG. 1  are shown having like reference designations, yet another illustrative example of a multi-server collaborative client-server system  150  includes the server repositories, here server repositories  12   a – 12   c , each of which are coupled to a respective server  18   a – 18   c . Each of the servers  18   a – 18   c  includes a respective collaboration engine  20   a – 20   c . The servers  18   a – 18   c  can be provided as the type of servers  18   a – 18   c  shown in  FIG. 1 . The server repositories  12   a – 12   c  can be provided as the type of server repositories  12   a – 12   c  shown in  FIG. 1 . The collaboration engines  20   a – 20   c  can be provided as the type of server repositories  20   a – 20   c  shown in  FIG. 1 . 
     A coupling, or communication link,  152  couples the client  22   b  to the server  18   c . As described above, a server, for example the servers  18   a – 18   c , can each have zero or more clients coupled to the server. Here, server  18   b  initially has no coupled clients and server  18   c  initially has two coupled clients  22   b ,  22   c . If and when the collaboration engine  18   c  determines that the server  18   c  is too congested, the coupling can be handed off such that client  22   b  breaks the communication link  152  to server  18   c  and establishes a communication link  154  with server  18   b . The determination of server congestion can be made in a variety of ways, including but not limited to a determination that too many clients are coupled to server  18   c , a determination that the clients coupled to server  18   c  require too much data to pass along the variety of client to server  18   c  couplings, a determination that the server  18   c  is performing too much processing, and/or a determination that one or more of the couplings from the collaboration engine  20   c  to others of the collaboration engines  20   a – 20   b  provides an insufficiently slow data path. Upon a determination of server congestion, the client coupling, for example the client communication link  152  to the server  18   c , can be handed off to other servers, for example to server  18   b  with a communication link  154 . Thus, the coupling can switch from the communication link  152  to the communication link  154 . It should be further recognized that a server, for example the server  18   c , can handoff more than one client coupling to more than one other server. 
     It should also be recognized that the handoff from the communication link  152  to the communication link  154  can also be provided upon a total loss of the communication link  152 . The total loss can result from a variety of causes, including, but not limited to, a malfunction of the server  18   c , and a malfunction of the server repository  12   c.    
     It will be recognized that the client to server coupling must be handed off seamlessly, i.e., without loss of data. From the discussion associated with  FIGS. 2–4  above, it can be understood that data associated with a client, for example the client  22   b , can reside either in total or in part in the server data storage areas  14   a – 14   c  associated with all of the servers  18   a – 18   c . In addition, all of the servers  18   a – 18   c  can have knowledge of the existence of the other servers  18   a – 18   c  by way of the collaboration engines  20   a – 20   c , as well as knowledge of the types of computing platforms of each of the client computers  22   a – 22   c.    
     It should be understood that the communication links  152 ,  154  can be provided as a variety of couplings, including wire couplings and RF couplings. It should be recognized that, where the communication links  152 ,  154  are provided as RF communication links, the handoff from the communication link  152  to the communication link  154  can be necessitated also by a loss of RF signal strength or signal integrity, hereafter referred to in combination as signal integrity, associated with the communication link  154 . Such loss of signal integrity can occur, for example, if the client  22   b  is mobile and moving, and/or if the server  18   c  is mobile and moving. When the client  22   b  becomes too far from server  18   c , then a loss of RF signal integrity will result. The loss of RF signal integrity can occur in a variety of other ways. For example, it will be recognized by one of ordinary skill in the art that the RF propagation behavior of RF pathways is partly based upon air temperature layers, solar activity and the like. Thus, even for stationary clients and servers, the RF propagation path may lose signal integrity from time to time, and a handoff, for example from the communication link  152  to the communication link  154  may be desirable. 
     Referring now to  FIG. 6 , in which like elements of  FIG. 1  are again shown having like reference designations, yet another illustrative example of a multi-server collaborative client-server system  180  includes server repositories, here server repositories  12   a – 12   c , each of which are coupled to a respective server  18   a – 18   c . Each of the servers  18   a – 18   c  contain a respective collaboration engine  20   a – 20   c . The servers  18   a – 18   c  can be provided as the type of servers  18   a – 18   c  shown in  FIG. 1 . The server repositories  12   a – 12   c  can be provided as the type of server repositories  12   a – 12   c  shown in  FIG. 1 . 
     A communication link  182  couples the client  22   b  to the server  18   c . As described above, a server, for example the servers  18   a – 18   c , can have zero or more clients coupled to the server. Here, server  18   b  initially has no coupled clients and server  18   c  initially has two coupled clients  22   b ,  22   c . If and when the collaboration engine  20   c  determines that the server  18   c  is too congested, the coupling can be handed off such that client  22   b  breaks the communication link  182  to server  18   c  and establishes a communication link  184  with server  18   b . The determination of server congestion can be made in a variety of ways as described above in association with  FIG. 5 . 
     Here, the server  18   c  and the server repository  12   c  are shown in phantom to indicate that the server  18   c  has become damaged or is otherwise not in communication with the client-server system  180 . In this case, the server  18   c  can handoff all of its coupled clients, here the clients  22   b  and  22   c , to another server, here server  18   b . Thus, the communication link  182  is handed off to the communication link  184  and the communication link  186  is handed off to the communication link  188 . 
     As described above, it will be recognized that the couplings, or communication links, must be handed off seamlessly, without loss of data. From the discussion associated with  FIGS. 2–4  above, it can be understood that data associated with a clients  22   b  and  22   c  that initially resides in the server data storage area  14   c  can reside either in total or in part in other server data storage areas  14   a – 14   c  associated with respective servers  18   a – 18   c . In addition, all of the servers  18   a – 18   c  can have knowledge of the existence of the other servers  18   a – 18   c  by way of the collaboration engines  20   a – 20   c , as well as knowledge of the types of computing platforms of each of the client computers  22   a – 22   c.    
     It should be recognized that, where the communication links  182 ,  186  are provided as RF communication links, the handoff from the communication link  182  to the communication link  184  and from the communication link  186  to the communication link  188  can be necessitated also by a loss of RF signal integrity. Such loss of signal integrity can occur, for example, if the clients  22   b ,  22   c  are mobile and moving, and/or if the servers  18   c  is mobile and moving. When the clients  22   b ,  22   c  become too far from server  18   c , then a loss of RF signal integrity will result. The loss of RF signal integrity can also occur in a variety of other ways described above in association with  FIG. 5 . 
     Referring now to  FIG. 6A , a client computer  190  is physically located near a first server  192   a  and a second server  192   b . The client computer  190  will be understood to be one of a variety of computing platforms, for example a laptop, or a PDA. A first RF communication link  194  is established from the client computer  190  to the first server  192   a  based upon a variety of criteria described above. 
     Referring now to  FIG. 6B , in which like elements of  FIG. 6A  are provided having like reference designations, the client computer  190  has moved to a new physical location. The first RF communication link  194  has been handed off to a second RF communication link  196  associated with the second server  192   b , based upon the variety of criteria. 
     While the client computer  190  is shown to be mobile, it should be understood that the any of the servers  192   a – 192   d  can also be mobile. 
     Referring now to  FIG. 7 , an illustrative example  200  of a method by which a communication link from a client to an initial server is handed off to another server begins at step  202  in which two or more servers generate and share, via respective collaboration engines, for example collaboration engines  20   a – 20   c  of  FIG. 1 , a “routing table” with congestion values that describe the congestion of each server, for example servers  18   a – 18   c  of  FIG. 1 . The routing table includes the congestion values that describe the congestion of the communication links between one or more client computers and the servers to which the one or more client computers are coupled. The routing table can also include signal integrity values that describe the signal integrity of the communication links between one or more client computers and the servers to which the one or more client computers are coupled. The routing table can also include allocation values that describe client-server processing allocation, as described above, associated with each of the one or more client computers. The routing table can also include client computer identification values that describes the type of each of the one or more client computers. The routing table can also include server identification values that describe the servers. The routing table can further include geographical position values associated with each of the one or more client computers and each of the servers. 
     An exemplary routing table generated and shared among servers (e.g., the servers  18   a – 18   c  of  FIG. 5 ) via respective collaboration engines (e.g., the collaboration engines  20   a – 20   c  of  FIG. 5 ) is shown in Table 1 below. 
                     TABLE 1                  Exemplary Routing Table                         Client Computers   Servers   Content                                                         Client   Client   Client   Server   Server   Server   Comm   RF   Congestion   Allocation   Signal       IP   Type   Position   IP   Type   Position   Link   Strength   Value   Value   Integrity                                                                 18.58.0.1    PDA   50,50   18.58.0.134   Desktop   50,100   RF   60   0.4   0.3   0.8       18.58.0.2    Phone   80,120   18.58.0.136   PDA   100,100   RF   40   0.3   0.2   0.6       . . .   . . .   . . .   . . .   . . .   . . .   . . .   . . .   . . .   . . .   . . .       18.58.0.10   Desktop   60,80   18.58.0.134   Desktop   50,100   Wire   n/a   0.4   0.4   n/a                    
In this particular embodiment, parameters indicated by the table headings are defined as follows:
 
     Client IP: A respective client destination IP address associated with each of the one or more client computers, (e.g. the one or more client computers  22   a – 22   c  of  FIG. 5 ). 
     Client Type: A respective client computer identification value that describes the type of each of the one or more client computers. Each of the one or more client computers will be understood to be one of a variety of computing platforms, for example a laptop, or a PDA, each having a specific operating system. 
     Client Position: A respective set of geographical position values associated with each of the one or more client computers. Server IP: A respective IP address associated with each server, (e.g., the servers  18   a – 18   c  of  FIG. 5 ), each server with which the one or more client computers communicate in a collaboration session. 
     Server Type: A respective server computer identification value that describes the type of each server. Each server will be understood to be one of a variety of computing platforms, for example a desktop, or a PDA, each having a specific operating system. Like each of the one or more client computers, each server can also be mobile and moving. 
     Server Position: A respective set of geographical position values associated with each server computer. 
     Comm Link: A respective type of communication link that couples each of the one or more client computers to the server. There are a variety of communication links, including wire communication links and RF communication links. 
     RF Strength: A respective RF field strength value associated with each of the one or more client computers having an RF communication link. The RF field strength can be provided, for example, by RF field strength electronics coupled to the collaboration engines (e.g. collaboration engines  20   a – 20   c  of  FIG. 5 ). 
     Congestion Value: A respective congestion value associated with each server, the congestion value describing the congestion of the communication links between each of the one or more client computers and the respective servers to which the one or more client computers are coupled. 
     Allocation Value: A respective allocation value that describes the client-server processing allocation, as described above, associated with each of the one or more client computers. 
     Signal Integrity: A respective signal integrity value that describes the signal integrity of the communication link between each of the one or more client computers and the server to which the one or more client computers is coupled. 
     In one embodiment, the routing table can be static, having values pre-assigned. In another embodiment, the routing table is distributed amongst the servers, for example, the servers  20   a – 20   c  of  FIG. 5 , and the routing table in dynamically updated in real time in accordance with the availability and accessibility of the servers to the collaboration session. 
     Having the routing table, at step  204 , a server determines whether it is congested. If the server is not congested, then the server updates its routing table at a pre-determined time interval and returns to step  202 . If the server determines that is congested, it goes to step  206 . At step  206 , if the server is congested either in total or with regard to any respective one of the one or more client computers, the collaboration engine associated with the server can attempt to re-allocate the processing between the server and any respective ones of the one or more client computers. If the re-allocation is generated, the processing begins again at step  202 , at which a new routing table is generated. If the re-allocation is not generated, for example if the collaboration engine determines that re-allocation will not alleviate the congestion, the process continues at step  208 . At step  208 , a client is selected by the collaboration engine from among the one or more clients that are coupled to the server as listed in the routing table. The selection is determined by a variety of factors, including but not limited to, the amount of congestion represented by each respective one of the one or more clients and the type of communication link from each respective one of the one or more clients to the server. Additional determination factors are described above in association with the routing table. 
     Having selected a respective client for handoff to another server, at step  210  the collaboration engine determines from the routing table whether the communication link between the respective client and the server is an RF communication link. At step  210 , if the communication link of the selected client computer is not an RF communication link, then handoff is done at step  218  as a land link handoff. Further details of the land link handoff are shown described below in association with  FIG. 8 . If the communication link is an RF communication link, at step  212  the collaboration engine parses the routing table to find RF linked servers having an RF communication link. 
     At step  214 , the collaboration engine examines the entries in the routing table for the RP linked servers and determines which RF linked servers are within an RF range of the selected client computer. The determination of which RF linked servers are within RF range of the selected client computer can be made in a variety of ways. In one exemplary embodiment, the routing table can further include geographical position values associated with each of the one or more client computers and each of the servers. In another exemplary embodiment the routing table can include an RF field strength value associated with each of the client computers having an RF communication link. The RF field strength can be provided, for example, by RF field strength electronics (not shown) coupled to the collaboration engine. The determination of which RF linked servers are within RF range of the selected client can include, but is not limited to, limits placed upon the geographical position values and/or limits placed upon the RF field strength values. 
     At step  214 , if a selected RF linked server is found to be in range of the selected client, the communication link from the selected client can be handed off to the selected RF linked server. Further details of the RF link handoff are shown described below in association with  FIG. 8 . It should be recognized that for the handoff to occur seamlessly, it is desirable that the communication link to the selected server be established before the communication link to the initial server is broken. 
     In an alternative embodiment, the selected client can be coupled with communication links to both the initial server and to the selected server at all times. With this arrangement, the initial server can be the primary server that receives information, until the handoff occurs to the selected server, at which time the selected server becomes the primary server. 
     Referring now to  FIG. 8 , a service handoff process  250  can correspond to both the land link handoff (e.g., step  218  of  FIG. 7 ) and the RF link handoff (e.g., steps  212 – 216  of  FIG. 7 ). The land link handoff and the RF link handoff are described together below. Where distinctions between the RF link handoff and the land link handoff are necessary, the distinctions are expressly described. 
     At step  252 , a first server (e.g. server  18   c  of  FIG. 5 ) to which a client computer (e.g., client computer  22   b  of  FIG. 5 ) is coupled with a communication link (e.g., communication link  152  of  FIG. 5 ), searches the routing table for a second server (e.g., server  18   b  of  FIG. 5 ) to which the client computer may be handed off. Where the handoff is a land link handoff, the selection of the second server is determined by a variety of factors, including, but not limited to, the land communication link type, the server geographic position, the server congestion values, and the server allocation values. Where the handoff is an RF link handoff, the selection of the second server is also determined by a variety of factors, including, but not limited to, the RF communication link type, the server geographic position, the RF field strength, the server congestion values, the server allocation values, and a range between the client computer and the second server. 
     At step  254 , if the connection from the first to the second server is successful, the process proceeds to step  256 . Otherwise, the process returns to step  252 . At step  256 , the first server updates the routing table to indicate the new coupling that will occur between the second server and the client computer. At step  258 , where the handoff is an RF handoff, the second server connects to the client computer with an RF communication link (e.g., communication link  154  of  FIG. 5 ). At step  258 , where the handoff is a land link handoff, the second server connects to the client computer with a land communication link (e.g., communication link  154  of  FIG. 5 ). 
     At step  260 , if the connection is successful, the process proceeds to step  262 . Otherwise the process returns to step  252 . At step  262 , the first server transfers to the second server, via the collaboration engines (e.g. collaboration engines  20   b ,  20   c  of  FIG. 5 ), all of the required data and all of the required applications information relevant to the client computer. At step  262 , the first server also reallocates the client services to the second server. At step  264 , the second server tests the new communication link to the client computer. Where the communication link is a land communication link, the testing includes, but is not limited to, the congestion value associated with the second server now having the communication to the client computer. Where the communication link is an RF communication link, the testing includes, but is not limited to, the RF field strength, the signal integrity, and the congestion value associated with the second server now having the communication link to the client computer. 
     At step  266 , if the above testing is successful, the process proceeds to step  268 . Otherwise, the process returns to step  252 . At step  268 , the first and second servers finalize the changes to the routing table and communicate the new routing table to other servers (e.g., server  18   a  of  FIG. 5 ) via respective collaboration engines (e.g., collaboration engines  20   a – 20   c  of  FIG. 5 ). At step  270  the first server disconnects from the client computer. The handoff from the first to the second server is now complete. 
     Having described preferred embodiments of the invention it will now become apparent to those of ordinary skill in the art that other embodiments incorporating these concepts may be used. Additionally, the software included as part of the invention may be embodied in a computer program product that includes a computer-readable storage medium. For example, such a computer-readable storage medium can include a readable memory device, such as a hard drive device, a CD-ROM, a DVD-ROM, or a computer diskette, having computer readable program code segments stored thereon. A computer transmission medium can include a communications link, either optical, wired, or wireless, having program code segments carried thereon as digital or analog signals. Accordingly, it is submitted that that the invention should not be limited to the described embodiments but rather should be limited only by the spirit and scope of the appended claims. All publications and references cited herein are expressly incorporated herein by reference in their entirety.