|
|
用VB编写网络游戏服务器并非效率底,主要突破以下几个瓶颈,在专用服务器和带宽的支持下,服务器能够支持2000以上的用户。
VB作为服务器遇到的瓶颈是哪几个呢?
1、多线程的处理技术。VB在循环处理玩家数据和接受发送信息不能同步,造成了信息接收的延迟,这就需要多线程的支持,而VB在处理多线程上确实无法与C相媲美。
2、字符串的处理方式。VB在处理较长字符串时需要很长的时间。这也造成了VB在处理较多字符串时影响服务器速度的一个瓶颈。
突破以上两个瓶颈那么VB将会发挥它高效的特点,制作速度及代码重用都是VC所不能比拟的。
如果突破以上2个问题
1、我们知道,控件都拥有独立进程。WINSOCK控件并不能满足需要,我们需要编写一个能够在线程运行的独立的类似WINSOCK的控件,在每次接受到客户端连接时调用该控件,并分配线程。
2、字符串的处理上,VB确实慢了许多。有2个方法可以解决: (A)多利用MID函数,MID函数在字符串函数处理中速度是最快的 (B)用split函数来分割字符串并存储在变量数组中。B方法是仅次于C语言速度的方法,大家可以多多使用.例如:我们要存储好友列表,那么好友包括"张三 李四 王麻子 ……",那么我们申明一个
dim Frends() as string
dim frend as string
frend="张三 李四 王麻子 ……"
frends=split(frend," ")
这样就能获得好友数据,并且也是最快的。
服务器编程的整体思路如下:
If RunHighPriority Then
SetThreadPriority GetCurrentThread, 2
SetPriorityClass GetCurrentProcess, &H80
End If
1、以上代码将服务器设置在了高进程
2、连接数据库,并将所有数据库内容存储在变量中
3、创建自己编写的SOCKET控件,为其编写好线程
4、开始服务器循环
5、循环执行判断玩家的状态、NPC智能、地图掉落物品等是否需要更新
6、在编写的SOCKET控件,获得一个玩家的连接,则自动生成一个线程对应玩家的数据传输,当玩家的数据来临时,则处理数据事务
以上思路已经有编程实例。由于版权,不能将源码发布,请谅解
|
|