游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1952|回复: 0

VB编写网络服务器

[复制链接]

6

主题

22

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2009-7-22 08:05:00 | 显示全部楼层 |阅读模式
用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控件,获得一个玩家的连接,则自动生成一个线程对应玩家的数据传输,当玩家的数据来临时,则处理数据事务

以上思路已经有编程实例。由于版权,不能将源码发布,请谅解
     
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-19 09:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表