On 2014-12-27 01:56, pfranke...@gmail.com wrote: > I am just about setting up a project with an Raspberry Pi that is > connected to some hardware via its GPIO pins. Reading the data > already works perfectly but now I want to distribute it to clients > running in the network. Hence, I have to setup a server in Python. > > I do not want to reinvent the wheel, so I am asking myself whether > there is a good practice solution. It should basically work such > that once value (can be either binary or an analog value) has > changed on the server, it should send the update to the connected > clients. At the same time, it should be possible for the client to > send a particular request to the server as well, i.e., switch on > LED X. > > What kind of protocol do you recommend for this? UDP or TCP? Do you > recommend the use of frameworks such as twisted?
The eventual solution would depend on a variety of factors: - how critical is synchronization? - do clients need to know if they missed a message? (somebody disconnected from the LAN for a moment) - do clients need a way to receive historical messages in the event they were offline during the broadcast? (a power outage knocked out Client #18 at the time of the last update) - are all your clients on the same IP subnet? (you could use a broadcast packet) - would you rather push data as it changes, or have clients poll for the current state? (you write "it should send the update to the connected clients" which suggests a push architecture, yet you also want to have clients able to send updates: "should be possible for the client to send a particular request to the server…i.e., switch on LEX X") - are you concerned about security/authentication? Can a rogue device send a message pretending to be the server? What would/should happen if an unintended client snoops the traffic? Does it matter? The suggestions would look very different if you were just building a hobby notification system as a demo in a contained home/lab/office, vs. if you were building an industrial control system for monitoring a remote location and conveying security info. -tkc -- https://mail.python.org/mailman/listinfo/python-list