我觉得这个问题是每个从事程序开发与即将从事程序开发的同胞们应该关注的问题(项目开发技术指导)

liusujian02 2006-04-19 02:51:33
我现在在从事一个票务系统的开发,这个系统是个三层结构的非浏览器模式的,项目已经接近结束,但是在整个开发过程中,有一些问题我非常关注,其中有个问题是这样的:

项目中,有多客户端需要卖票,存在抢票 预定 锁定 的情况
在客户端,操作员卖票,必须要实时的与服务器同步,了解服务器里票的信息,以便客户进行操作,
但是这里就涉及到一个服务器如何和多个客户端通信保持数据同步的问题,我们是这样解决的:

客户端每60秒发送一个消息给服务器要求数据更新,从服务器下载本地所需要的数据
也就是说要刷新客户端的数据.
但是这样有以下两个缺点:

A :每次从服务器下载的数据量比较大
B :如果一个用户正处在售票操作中,此时发生了刷新,于是操作员所有的操作可能会丢失

我觉得这样的方式欠妥,请问一下,在这些方面有更好的方案吗?
急切希望和大家交流

可以发送到我的邮箱 liusujian-duck@163.com
不胜感激!
...全文
294 18 点赞 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
lsqtonyfh 2006-04-24
具体解决方案发到你的信箱里了
  • 打赏
  • 举报
回复
liusujian02 2006-04-21
我们这个系统也是支持VPN的
  • 打赏
  • 举报
回复
kknd2005 2006-04-20
这个不存在分布式事务和对COM+的需求吧...

以LZ的描述,客户端应该是没有DB的,服务器端才有DB...

其实也就是客户端要接受SERVER端的数据更新事件

架设一个VPN,然后在VPN内部采用REMOTING就可以了,服务器数据一旦更新,立即触发事件,通知客户端更新就是了,这个东西用REMOTING实现可以做得很完美的

也就是:客户端操作----调用SEVER端函数进行更新,同时SERVER端触发事件----SERVER端对事件进行广播,所有注册该事件的客户端(也就是联网的客户端)都会收到通知---客户端接收通知,在UI上进行数据更新

驾驶VPN的费用不是很贵

我上个系统就是采用这种方式进行的,运行得还行,但是因为也是第一次做这个,有一些地方无法完善(要推翻很多东西,时间不允许),留下一些遗憾,再做这个我就要完善这套东西
  • 打赏
  • 举报
回复
sweig0721 2006-04-20
建議去火車站看看別人的程序或者去賣一年的票吧.
  • 打赏
  • 举报
回复
sweig0721 2006-04-20
好的算法要有實際操作的基礎.
  • 打赏
  • 举报
回复
wls12342004 2006-04-20
用c/s的结构,也许就可以了
  • 打赏
  • 举报
回复
liusujian02 2006-04-20
楼主没明白我的意思
  • 打赏
  • 举报
回复
太简单了;
把票分段;客户端先分到票;等票不多的时候再与服务器通讯;你可以分析一下每个点的出票量;再分发。
用锁太慢;在表中加一个字段;比如说:“已卖”等于0为没卖;等于1为已卖;update .......where 已卖='0';决定不会卖重
  • 打赏
  • 举报
回复
nonocast 2006-04-19
用事务
可以学习一下信号量的思想
  • 打赏
  • 举报
回复
aSalt 2006-04-19
既然因该,所以关注

COM+ 就是解决你的这个问题的,这么说有点笼统,不过这本来就是概念+技术性的问题,不是一两句能说清楚的,建议看看"较深"的ADO.NET书籍,里面有案例和设计思想
  • 打赏
  • 举报
回复
AntStar 2006-04-19
我觉得数据更新一定要用“拉”的方式,不能用“推”的。主动更新数据不是好策略。

你看每次去买火车票的时候,你都要说要那趟车,什么时间等等,售票员输入信息然后再点查询,这时服务器再返回相应的数据。


同意
  • 打赏
  • 举报
回复
kirc 2006-04-19
我才看到你的标题
汗...
  • 打赏
  • 举报
回复
kirc 2006-04-19
c/s的程序也存在这样的问题么?

我觉得数据更新一定要用“拉”的方式,不能用“推”的。主动更新数据不是好策略。

你看每次去买火车票的时候,你都要说要那趟车,什么时间等等,售票员输入信息然后再点查询,这时服务器再返回相应的数据。
  • 打赏
  • 举报
回复
sunkangta 2006-04-19
的确是个难题
  • 打赏
  • 举报
回复
分部式事物,建议lz研究一下,com+

  • 打赏
  • 举报
回复
Knight94 2006-04-19
to A :每次从服务器下载的数据量比较大

你可以定义请求种类,一种是完全更新;一种只是更新一部分(这你需要在服务器端写一个比较的算法)

to B :如果一个用户正处在售票操作中,此时发生了刷新,于是操作员所有的操作可能会丢失
当用户正在售票操作的时候,停止刷新操作。
  • 打赏
  • 举报
回复
panjf 2006-04-19
建议你去参观一下火车订票的系统,那个一定对你的系统有好处。
  • 打赏
  • 举报
回复
zhaoliang_chen 2006-04-19
锁是令人头痛的问题
  • 打赏
  • 举报
回复
相关推荐
发帖
C#
加入

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2006-04-19 02:51
社区公告

让您成为最强悍的C#开发者