对于VB说实话我接触的不多,也许有一些问题可能很简单,请大家不要笑话对于编写C/S结构程序相信这里很多人都做过,小弟也要做一个C/S程序,有几个问题想问1.用做SERVER程序的时候,用什么方式传输数据能节省服务器资源而且高效?
  
  看到网络上有很多winsock控件做服务程序的范例,自己也做了一个,在局域网里边用WINSOCK传输一次性传输10000条100字节左右的数据(P4 1.5G CPU)消耗时间为3秒,当时CPU工作为100%。我想如果是传奇或者其他的网络游戏服务器的传输量恐怕不比我这个测试小那去,但是消耗却很少。不知道大家对服务端网络传输性能优化方面有何经验,请赐教。而且在用WINSOCK的时候,不能在一个事件中执行一个以上的winsock控件组里边的senddata方法,否则将会造成数据丢失。在数据群发的情况下,应该采用什么模式最稳定?2.在某一些用户网络连接不稳定的时候。如何能确保数据不丢失。  在设计过程中假想到一个问题,当当前数据还没有发送完毕的时候又需要发送新数据给用户的时候应该是不可行的。是不是要为每个用户做一个单独的传输队列。表示当前有那些数据还没有发送。在下次SendComplete好一起发送出去。不知道是否还有更好的传输办法。3.在线用户列表的排列和整理。在线用户列表用什么方式能够达到最高效的存储状态。是用2维数组,Collection4.在当用户断线的时候是否需要有效的回收资源  在看到用winsock控件编写的聊天室的时候看到的范例都是用WINSOCK数组。而当中途有用户离开的时候。这个控件实际上还是有资源占用的。打个比方,服务器上到10000人的高峰期以后,又下降到1人,但是系统中却还有但是sock数组最大值还是10000。但如果即时回收资源,也就是清除控件数组的某个部分。进行数组串位。恐怕还不可行,因为每个SOCK进程都是单独的,当进行数组清理的时候正好别的WINSOCK执行事件。真不知道效果会是什么样子。还有一点。如果当时在线10000人,结果第一个人退出
需要移动9999次数组内容。好象不太可行。目前遇到的SERVER的问题就是这点
不知道大家是否有一些比较权威的SERVER程序设计方面的资料
能做出来网络游戏程序或者QQ服务器那种标准的SERVER。请大家赐教

解决方案 »

  1.   

    你这几个问题我都遇到过,都有办法解决,我只能简单告诉你方法,不能深说,因为是本人+班了1个月研究出来了,属于商业秘密,呵呵,现在我给你挨条解释
    1。确实,不能连续发2个以上的,但是2个可以德 1和2之间用doevents间隔可以发2个。如果多了的话1次多发些数据。socket还有个事件是发送完1个包之后执行,其他的要自己考虑了 
    2。使用tcp协议可以解决2问题,tcp本身带找包的机制  socket还有个事件是发送完1个包之后执行,其他的要自己考虑了 
    3。要是你这2个的话,我会选择集合,但是我选的是数据库,因为在查询和删除的问题上,还是数据库方便
    4。这个可以解决,你要在创建树祖的时候判断一下,好了,不能多说了,技术上还要自己研究,我可以告诉你,你的问题基本上都能解决
      

  2.   

    还有一个问题想请教
    如果到用户网络卡的情况下
    SendComplete是不是也要需要一段时间才能执行
    如果用SendComplete后发送新数据的时候是否会影响到队列的传送速度
      

  3.   

    vb的senddate只是将要发的数据发给网卡的传输层,所以说,senddate不意味着发送,网络卡的话肯定会影响速度,但是问题不会太大,发送是很快的