`
文章列表
一般的RPG游戏,都有怪物轮训机制,会将所有场景地图下的怪物和玩家遍历一遍,往往要花很久的时间,这个地方可以做一下优化,将尚未激活的怪物,处于游走状态的怪物,独立出来,不放在场景轮询里,这样可以让这批怪物占用比较少的CPU时间。     具体方法是,单独的一个线程来处理这些怪物,更新他们的状态,包括停止,巡逻等,怪物刚创建的时候,由这个线程来管理,1s一次更新怪物的状态,如果有移动的话,广播位置信息。然后怪物AI的激活,由玩家进行,玩家的AOI中出现怪物,因为某种原因,例如靠近主动怪,则激活这些怪物的AI,将其中单独线程中移除,加入场景轮训中来。即怪物AI的触发由玩家来进行。
现在碰到了一个棘手的服务器问题,描述如下:服务器采用netty的tcp协议作为client-server的通讯方式,tcp的好处是与客户端的连接为长连接,消息格式精简,传递比较快速,而且服务器可以发送push消息。但现在的问题是,公司的网络出口ip经常会变更,而tcp是根据ip+port来判断客户端连接的,因此随着ip的变化,该连接肯定失效了。游戏会发生让玩家重新登陆的情况,这样的话,玩家是无法接受的,相当于无缘无故被踢出了游戏。   但是不少公司都是仅有几个出口ip,说明这种情况还是比较多见的,而且像qq等软件,用了tcp或者udp协议,也可以很好的适应这种环境,因此肯定有合适的解决方案。 ...
jdk 5的concurrent包中,添加了几个CopyOnWrite开头的类,包括CopyOnWriteHashMap,CopyOnWriteArrayList,CopyOnWriteArraySet。 copy-on-write模式声明了,为了维护对象的一致性快照,要依靠不可变性(immutability)来消除在协调读取不同的但是相关的属性 ...
  github上比较流行的java websocket框架,主要包括以下内容:   1.WebSocketServer对象 server的入口,每次都只需要创建一个实例,可以接受所有的websocket请求,内部采用NIO作为底层io框架,主要有两部分组成:   run()方法中用while ...
我们游戏采用了mysql作为数据库软件,几经优化,已经相对稳定,有连续几个月稳定运行的记录,不过最近发生了比较诡异的现象,数据库有100多个进程突然锁住,用show processlist命令查看,几分钟之内一直是这些进程在执行相同 ...
jetty是一个轻量级的java web容器,已经变得越来越流行,比较好的一点是它可以作为组件嵌入到java应用中,而不需要像tomcat一样将web项目部署到某个目录下,当然 tomcat也有自己的embeded版本。Google甚至选择了jetty而放弃了tomcat,可见jetty的受欢迎程度。下面提供一个spring集成jetty应用的一种方式,场景是,web server情况下,jetty接受请求,处理后返回xml或json格式的响应。 <bean id="JettyServer" class="org.eclipse.jetty. ...
我们游戏在开心网上线之后,最高有一千多的同时在线人数,不过好景不长,有几天晚上8-10点之间,发生了所有玩家被踢下线的情况。   一次发生在晚上9点左右,此时人数在持续上升,突然发生玩家全部掉线,当时几个同事 ...
Global site tag (gtag.js) - Google Analytics