问题描述
目前应用环境:PC上安装监控软件,通过Socket与硬件通讯,获取硬件状态信息,并下发控制指令。预实现应用环境:多台PC上安装监控客户端软件,通过Socket控制同一台硬件,如果某个客户端对硬件下发了控制指令、改变了硬件状态信息,其它客户端能及时获知,并进行硬件状态信息的调整和控制功能的使能。现在想使用C/S架构实现,服务器端直接与硬件通讯,客户端通过服务器端间接和硬件通讯,那么如何保持各个客户端之间的同步呢?例如,对硬件的某个控制功能类似开关,“开”了以后就只能“关”、“关”了以后就只能“开”,假设某个客户端通过服务器的数据库获知该控制处于“关”的状态,发送“开”的命令,而与此同时,另一个客户端也发送“开”的命令,则会产生冲突,如何能避免这种状况的发生呢?
解决方案
解决方案二:
每次执行一个操作之前去请求一下状态每次操作成功之后广播所有的客户端通知其状态改变
解决方案三:
采用TcpBinding,一个人操作后通知其他人Update典型的Observer模式
解决方案四:
用WCF,就可能很好的解决任何客户端都调用WCF,状态由WCF来控制并转发给其他客户端,其使某个客户端获取的状态暂时不正确,当向服务器发送请求操作时,则由服务器纠正(如当A客户端已经成功开了,但B客户端的状态为"关",当B客户端向服务器请求"开"时,则由服务器告诉B不能开,并更新状态到B或由B重新获取状态).
解决方案五:
而在服务器端中WCF使用状态操作加锁(如lock锁),就免除多个客户端同时(并发)操作某种状态.
解决方案六:
该回复于2012-03-05 22:15:17被版主删除
解决方案七:
该回复于2012-03-06 08:45:51被版主删除
解决方案八:
一个办法是调用服务端的webservice方法进行控制,方法加上mutex并发控制,这样可以保证一个时间只有一个客户能够访问
解决方案九:
强烈建议用webservice方法进行控制
解决方案十:
用WCF吧,对于分布式较好