views:

47

answers:

1

I'm just getting into the client-server data sync stage of my iPhone app project, and have managed to get my CoreData data model loading on both the iPhone client and my TurboGears server (which is good). I'm now beginning to tackle the problem of sync'ing data between the server and multiple clients, and while I could roll my own, this seems like one of those problems that is quite general and therefore there should be frameworks or libraries out there that provide a good deal of the functionality.

Does anyone know of one that might be applicable to this environment (e.g. Objective-C on iPhone, pyobjc / Python on the server)? If not, does anyone know of a design pattern or generally-agreed upon approach for this stuff that would be a good road to take for a self-implementation? I couldn't find a generally accepted term for this problem beyond "data synchronization" or "remote object persistence", neither of which hit much useful on Google.

I did come across the Funambol framework which looks like it provides this exact type of functionality, however, it is C++ / Java based and therefore seems like it might not be a good fit for the specific languages in my project.

Any help much appreciated.

+1  A: 

Since you are using TurboGears already, take a look at the RestController documentation. Using RESTful services has become a widely adopted architecture with many implementations for both clients and servers. Matt Gemmell's MGTwitterEngine is a good example of the client implementation of a specific API, Twitter.

falconcreek
Thanks for the reply, but I'm not so much looking for a client-server communication protocol (I'm already using a RESTful approach for cli/srv comms), but for a more high-level architecture that solves problems specific to client-server data synchronization, for example, conflict resolution between multiple versions of the same object sent from different clients.I know that there is a good amount of business-specific logic required for these systems, but even some kind of base framework would be better than nothing. Funambol looks like it does this, but the platform is wrong for my project.
glenc
REST is architecture. It is more than a protocol. The key concept is "Resources" (refer to the wiki linked). There is a tendency to require remote clients to poll for updates, which can be done, however if you can, layer REST with Push Notifications to tell clients when changes "of interest" have occurred.
falconcreek