因为搭建50个室内趣味游戏活动演示使用

彩票游戏制作/真人游戏搭建/娱乐电玩城开发搭建维护 - 源码交易网
当前位置: >
彩票游戏制作/真人游戏搭建/娱乐电玩城开发搭建维护
重要提醒!!盗图狗走开!!本图片全由本公司演示站真实截图!!我们做的不仅仅是网站,更是后期良好的售后维护!我们对每一个客户都用心制作,保证完美运营!三端优势,任您选择!双端APP+PC端+wap端!给我们一份信任,我们还给您一份保障!&拥有我们,您就拥有了一只技术团队!客服加扣扣:我们做的不仅仅是网站,更是后期良好的售后维护!我们对每一个客户都用心制作,保证完美运营!三端优势,任您选择!双端APP+PC端+wap端!给我们一份信任,我们还给您一份保障!&拥有我们,您就拥有了一只技术团队! &客服:QQ & &VX:一,由于软件产品的特殊性 ,请勿将本店商品与其他店铺进行比较,本店所卖产品都是经过团队的辛苦研发而成的,其价格的确定也是以非常严谨的态度决定的,我们所卖的不仅仅是源码和程序,还有不厌其烦的技术支持与服务。二,由于宝贝是虚拟物品,具有可复制性,所以不在7天包退换范围之内,买家和客服沟通确认软件没有问题并且付款以后,没有任何理由退款。若拍下并且付款以后表示您接受此协议!三,本程序仅供娱乐,如有非法用途与本公司无关,一切法律责任自负!&专业技术团队!&网站平台一条龙搭建 定制开发!&保证一手开发源码,安全稳定无漏洞!详情请咨询特别声明:1.很多顾客不懂技术然而导致程序不能使用 购买之后出现任何问题先联系客服而不是各自随意乱改2.程序本身没问题的 有顾客自己乱改导致的问题 我们是免费维护的但是再三出现是因顾客自己本身操作不当 我们将不会给予免费修复(可以有偿服务)3.有很多顾客 买了用了1个月 半个月突然出问题 (例如服务器被他人攻击 入侵 ) 给了维护费的我们免费处理 没给的 我们是不给予维护的 所以请你们一开始说清楚 问清楚 别到最后说是我程序问题 闹出不必要的纠纷&4.最近出现个别人说我们提供的服务器贵 结果去买几十元的服务器 出了问题怪我们 说我们程序有问题 一样的东西 有人用一年没事有人用半个月就报废 一般你不乱改 服务器安全做好基本就没事情(当然有问题 我们给处理会更新 &前提是我们程序问题 而不是你个人的问题)
价格:8600元
同分类商品
推荐分类:
源码交易网 |如何搭建一个小游戏网站,适合新手建站的视_百度知道
如何搭建一个小游戏网站,适合新手建站的视
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
匿名用户知道合伙人
直接到网上下载pageadmin和discua都不错、简单方便,直接,下载就能轻松建站。
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。一起来聊聊如何用docker搭建游戏私服之win7下部署docker环境一起来聊聊如何用docker搭建游戏私服之win7下部署docker环境彼岸心百家号简单介绍一下搭建游戏私服的需求,这主要是给策划和测试使用的,因为每个策划关注的内容,每个测试测试的点都不一样,都需要去修改测试服务器的配置或者策划表,以达到他们想要测试或验证的目的,这就不能都在一台测试服去频繁改动,当然也不可能为每个策划或者测试都配一台服务器(不要钱呀)。那么可不可以在他们的机器去搭建环境,在他们自己的机器部署游戏服务器呢?当然是可以的,不过这会搞死程序(O(∩_∩)O),比如说我们的游戏服务器使用的java,你感受到了为那么多个策划测试去部署java环境以及服务器依赖的组件的恐怖了吗!!!真要这么做会有很多后续问题需要程序去收尾,这当然不是我们想要做的,于是我在接受到这个需求的时候立马想到了可以使用Docker解决这个问题,只要在机器上部署好了Docker环境,游戏服务器打包成docker镜像,需要使用的时候载入即可,镜像里面就是完整的游戏服务器内容,只依赖docker环境,不依赖其他任何外部条件,这样我们需要做的工作就是为策划的机器搭建docker环境,以及发布我们的游戏服镜像。既然使用了docker,为什么要在windows下使用呢?因为策划测试用的都是windows呀(O(∩_∩)O),镜像还是会发布在linux。docker是什么?docker的应用以及非常广了,就不再这里介绍了,不知道的同学可以看看这个:http://www.docker.org.cn/book/docker/what-is-docker-16.html本文主要介绍的在win7安装时遇到的问题以及简单使用。docker.png1 下载与安装Docker Toolbox首先介绍一下docker在windows的支持,引用Docker 中文指南的描述:因为Docker 引擎使用的是Linux内核特性,所以我们需要在 Windows 上使用一个轻量级的虚拟机 (VM) 来运行 Docker。我们使用 Windows的Docker客户端来控制 Docker 虚拟化引擎的构建、运行和管理 。为了简化这个过程,我们设计了一个叫 Boot2Docker 的应用程序,你可以通过它来安装虚拟机和运行 Docker。虽然你使用的是 Windows 的 Docker 客户端,但是 docker 引擎容器依然是运行在 Linux 宿主主机上(现在是通过Virtual box)。目前docker对win10的支持已经做的很好了,但是对于低版本的win7相对来说还是有很多问题,win10直接下载https://www.docker.com/docker-windows Docker for Windows直接安装即可,但是win7的安装方法完全不同。首先我们需要下载官方提供的Docker Toolbox安装包,地址为:https://www.docker.com/products/docker-toolbox该安装包含了所需要的所有内容。然后点击安装,出现如图示:安装界面1.png安装界面2.png安装路径可以选择其它盘,我安装在了D盘。安装界面3.png这是安装包具备的组件,其中Docker client,Docker Machine是一定要安装的,Virtualbox和Git如果事先安装了可以不勾,不过virtualbox需要5.0版本以上,版本4是不行的,Kitematic是Docker的图形化管理界面,也勾上吧,虽然我不用。安装界面4.png最后一直Next,点finish就完成了安装。2 初始化Docker ToolBox安装完毕后会在桌面出现三个快捷方式:快捷方式其中Docker Quickstart Terminal是初始化脚本,可以去安装目录查看所有的组件:安装目录.png里面的start.sh就是桌面上的Docker Quickstart Terminal,可以看到是这是一个shell脚本,也就是需要bash来执行,因此在安装的时候如果win7没有安装Git的话一定要勾上,并且记住其安装位置,一般会在:bash在执行这个脚本之前,我们先打开该脚本简单看看其做了什么事:start.sh.png简单理解一下发现脚本主要初始化了各个工具的状态,以及设置了代理,其中virtualbox是第一个被检查的,因为需要通过VBoxManage创建虚拟机,因此在执行脚本之前我们先看看virtualbox是否正常,打开桌面的:Paste_Image.png如果出现下图所示那么恭喜你,可以进入下一步执行脚本了。(第一次的打开是都没有的,只要打开不报错就表示虚拟机没问题)但是有部分机器可能会出现一些错误,比如我的机器就出现了:获取 VirtualBox COM 对象失败,应用程序将被中断。这个错误的解决方法有几种,(1)兼容性问题右击virtualbox图标属性中,兼容模式运行这个程序,选择除了win7之外的版本。(2)a. 打开开始菜单----然后点击运行---输入"D:Program FilesOracleVirtualBoxVBoxSVC.exe“ /reregserver然后按回车,(注意virtualbox的安装目录,我这里安装在D:Program FilesOracleVirtualBox目录,视情况而定,改成自己的目录)b.再打开开始菜单---运行---输入regsvr32 "C:Program FilesOracleVirtualBoxVBoxC.dll"regsvr32如果提示不存在可以去找一下自己系统的存放路径,使用绝对路径来使用,一般会在:(3)修改注册表,一般这个方法是最有效的引用这位博主的博文:http://blog.csdn.net/zp_00000/article/details/主要是修改修改注册表中如下的两项:HKEY_CLASSES_ROOTCLSID{0-}HKEY_CLASSES_ROOTCLSID{0-}分别修改上面两项中的 InprocServer32的默认值为C:Windowssystem32oleaut32.dll具体操作可以跳转到上面链接,我这里就不赘述了。virtualBox可以正常运行之后我们点击执行启动脚本,可以点击桌面上的快捷方式也可以点击start.sh,我启动的是桌面的,启动后如图示;这个过程会提示创建虚拟机,ssh等内容,在创建虚拟机过程时需要提供boot2docker.iso镜像,路径默认是在C:Users用户名.dockermachinecache启动脚本时会提示找不到,需要在线下载,这个过程会非常慢,其实Docker ToolBox安装包是已经提供了boot2docker.iso了的,我们只要手动将该文件拷贝到指定目录再重新去启动就不需要再联网下载了。可能还会有同学拷贝了boot2docker.iso镜像,启动脚本时会提示该镜像不是最新的版本,并且会告诉你最新的版本,还是需要联网下载,这个如果是在外网搭建的话就直接让其联网下载,不过可能会很慢,因为我是在内网搭建,所以需要在外网下载好最新的boot2docker.iso镜像,再拷贝到下载路径为:https://github.com/boot2docker/boot2docker/releases选择最新的:再次启动start.sh脚本,这个时候等待其初始化完毕即可,应该不会再遇到什么问题了,最后初始化成功如下:3 关注的概念上面的步骤已经完成了docker在win7上的安装,现在已经可以使用了,在使用之前我们先理清楚需要经常关注的几个概念,Linux上使用docker和win7还是有区别的,主要是平台的问题。首先,我们的docker daemon是运行在virtualBox虚拟机上的,virtualbox安装了boot2docker Linux,里面集成了Docker引擎,win7主机上安装了Docker client,可以执行docker命令:但是是不能直接访问docker Daemon的:你很容易会想到,要想在win7的终端使用docker 操作镜像容器只需要通过ssh连接上虚拟机就可以实现我们想要的操作,就像连接远程服务器一样,boot2docker默认的账户和密码是docker, tcuser,虚拟机的ip为192.168.99.100如图示:但是这样做和直接在虚拟机安装linux,再安装docker也没什么区别是吧,为了简化这个过程,Docker官方提供了一个强大的工具:docker-machine官方描述:Docker Machine so you can run Docker Engine commands from Windows terminalsdocker-machine 主要用于管理虚拟机,包括虚拟机的创建、删除、环境变量设置以及可以直接连接到虚拟机进行对docker的操作。我们通过使用windows的powershell来尝试下docker-machine命令,(dos的cmd实在体验太差了),“windows” + r,输入运行程序:powershell。比如查看当前的docker虚拟机的状态:可以看到当前有一台名为default的docker虚拟机在运行,设备为virtualbox,并且其ip为192.168.99.100。查看docker虚拟机的ip可以直接通过docker-machine ip提示.png在本机访问docker里面的服务不能直接通过127.0.0.1,需要通过虚拟机的ip来访问。查看虚拟机的环境变量:docker-machine env default由上面命令的提示可以知道,可以通过docker-machine env default | Invoke-Expression命令建立powershell与linux虚拟机的连接,就像通过ssh连接一样,但是不用通过密码验证,这个时候就可以在windows终端直接使用docker命令了:到了这里你应该知道要想部署镜像只需要写一个powershell脚本就能满足需求了吧(_)。4 使用示例docker环境搭建好之后,我们来跑一个web容器,然后在win7本地浏览器访问试试,在外网可以直接通过docker pull nginx拉取nginx镜像,我的已经拉好了,然后通过载入镜像,运行容器docker run--name some-nginx -d -p 8080:80 nginx-name 表示给容器取别名,用于区分,名字不能重复-d 表示容器在后台运行-p 表示映射本地端口8080到容器的80端口,注意这里的本地指的是虚拟机ip,不是127.0.0.1然后我们在本地浏览器访问:5 映射本地目录到容器前面提到,策划测试需要频繁去改动静态文件,比如策划表,改改道具的数量,属性等,所以需要将容器的目录映射到windows的本地文件夹,这个目录假设用来存放策划表,那么就可以实现在windows查看修改文件,而服务运行在docker容器。docker提供了数据卷来达到映射的目的,通过-v选项指定,如果是在Linux上使用docker,比如想要映射本地/home/tmp目录到容器的/tmp,可以这样:docker run --name some-nginx -v /home/tmp:/tmp -d -p 8080:80 nginx但是在windows能不能直接在powershell直接通过-v指定本地目录呢?比如docker run -ti -v /d/users:/tmp centos /bin/bash映射d盘的users目录,这样能达到映射的目的吗?答案肯定是不行的,为什么呢?因为容器是运行在virtualbox虚拟机内的,指定的 /d/users目录virtualbox是不知道的,它无法识别。玩过虚拟机的都知道要想虚拟机和主机共享目录需要对虚拟机进行设置,将主机的目录共享到虚拟机的某个目录,这也是目录映射,然后再将该目录映射到容器,这样就达到映射本地目录到容器的目的。我们打开virtualbox,点击“”设置“,再点击“共享文件夹”,点击右边的“+”标志然后设置共享文件夹的路径和名称,并且选择“自动挂载”和固定分配,然后在这个设置的共享目录里面就可以随意创建想要的目录,然后映射到容器了。有同学不禁会问这个还要去打开图形界面设置共享文件夹很麻烦,Docker Toolbox安装完成是默认共享了c/Users到虚拟机的,所以不想重新设置可以映射/c/Users的目录,像我需要在部署的时候直接通过运行脚本的形式运行容器,就不会再去重新设置了,虽然也可以通过VBoxManage命令来直接创建共享文件夹,但是不再去研究这个了,/c/Users已经可以满足需求。来试试:在Users创了Docker的目录,并新建了cv.txt文件,然后挂载到容器:docker run -ti -v /c/Users/docker:/home centos /bin/bash-t 表示开启伪终端-i 表示打开标准输入/bin/bash 表示运行bash程序执行成功之后会直接进入centos容器内部,然后我们去/home看看能不能找到cv.txt文件:发现cv.txt文件出现了容器的home目录下,然后在该目录创建一个文件,touch test.sh再看windows目录下的变化:大功告成!结语:ok,到此为止就介绍完毕了搭建过程,写的有点啰嗦,有同学可能会觉得你这个整个过程下来也是很麻烦呀,是的,第一次安装的时候确实需要费点时间的,但是只要把常见的错误总结下,安装完Docker Toolbox安装包之后的行为,可以通过脚本去控制所有的操作,这样部署docker环境策划只需要安装一个软件,执行一个脚本,以后更新游戏服的时候只需要拉取一下服务器上的镜像或者通过其他的形式去更新,这种简捷只有你真正用过了才会领略到,关于使用docker还有诸多好处,在这就不一一列举了,实在是表达能力不太好呀。接下来还会介绍配置基础环境镜像,以及最后整个基于Docker私服的搭建过程,嗯,在这里又埋了一个坑了,一定会填的以上是在win7部署docker的过程,希望对大家有所帮助,有什么问题可以留言讨论,大家一起学习。Regards,codejust.参考文章:http://blog.csdn.net/tina_ttl/article/details/http://www.jianshu.com/p/dfc1http://www.cnblogs.com/studyzy/p/6113221.htmlhttps://bjddd192.github.io/docker//win7%E4%B8%8B%E4%BD%BF%E7%94%A8docker-toolbox.htmlhttp://www.widuu.com/chinese_docker/installation/windows.html作者:codejust本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。彼岸心百家号最近更新:简介:简单的人,简单的事。作者最新文章相关文章[秘密通道]
[高手分类]
[入门分类]
现在位置:&&&&&&&&&&
无需安装任何插件支持手机
组件源码下载列表:
相关课程推荐
《速来架设教程2.04》课件内容
<img src="/upload/vod/883.jpg" alt="" /速来金币版搭建教程 &仅供学习使用请勿商业用途 如果私自运营与本站和本人无关测试环境: Windows Server 2008 R2 SP3&
IIS7.5 + NET4.0数据库: MSSQL2012以上相关软件: &NOTEPAD++ &已有游戏玩法:水浒传 摇钱树 速来捕鱼 龙马奔腾 超级赛车 大白鲨 欢乐牛牛 血战麻将 乐透金花 四人牛牛 ATT翻牌机 天天牛牛 百家乐 欢乐斗地主已知问题: 没找到控制无控 - 无房卡游戏&送给喜欢研究的人 & &=============www.httpvip.com============================&第一节 &数据库 网站后台 &服务端 &客户端&TGameRoomInfo & 游戏房间信息库&Web_manage_admin 管理信息库默认后台账号 admin 密码 5308792客户端IP和更新站gameConfig.json& &wxAppID& 微信开放平台ID &&wxAppSecret&KEY这套微信最简单的 &com.ironnet.yqlwyx.game &包名&应用签名:e89b158e4bcf988ebd09eb83f5378e87&和我用的工具一样就是这个签名后台 网站\Admin\Admin\Login.aspx &第十五行 删除后面的网站\Member 给 加了东西进不去要删除 web.config最后一行其它没什么了 看下游戏然后讲一下有几个游戏在另外一个服务端上提取 是红鸟的 这套应该是红鸟改皮渔夫不行 进去闪退了 &其它游戏好像还可以只讲一下 水浒传 怎么弄 这里没有 这个端有27款游戏不过库里没有 这套服务端是红鸟的可以去研究下红鸟的&DBSERVER-数据库IP地址 如果有开外网就可以用外网IP 我这个没开只能用127.0.0.1机器人刚才测试可以上可能机器配制不够卡了 算了自己去研究吧=========== 微信开放平台签名获取工具=============================https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android2.apk=========== 网狐通用工具=============================链接:https://pan.baidu.com/s/1eSfbzPo 密码:x0rj&=========== PHP环境下载===============================http://www.phpstudy.net/ &默认MYSQL账号密码是root&===============NODE.JS 下载===============================http://nodejs.cn/=============PHP环境 宝塔面板==============================http://www.bt.cn===========数据库下载地址sql2014 密钥 百度大把===============================&链接: https://pan.baidu.com/s/1kVaIdEZ 密码: upji&===========数据库下载地址sql2012密钥 百度大把===============================http://download.microsoft.com/download/A/5/5/A550A7AD-F8A3-48C7-B409-DFA/SQLServer2012SP1-FullSlipstream-CHS-x64.iso===========windows2008 SP1 补丁 用于2008系统不能安装SQL2012系统用的请打这补丁===============================https://www.microsoft.com/zh-CN/download/details.aspx?id=5842&==========常用修改软件=============================================NOTEPAD++(文本修改) &photoshop(图片处理)&==========安卓apk包常用的修改软件==================================ApkIDE & AndroidKiller & HEdit十六进制编辑器https://down.52pojie.cn/Tools/Android_Tools/&苹果ipa 直接解压就好了
站长微信:cmd989博客分类:
一、 java NIO简介
nio是java New IO的简称,在jdk1.4里提供的新api。Sun官方标榜的特性如下:
? 为所有的原始类型提供(Buffer)缓存支持。
? 字符集编码解码解决方案。
? Channel:一个新的原始I/O抽象。
? 支持锁和内存映射文件的文件访问接口。
? 提供多路(non-bloking)非阻塞式的高伸缩性网络I/O。
关于java NIO的实现部分不是本文讨论的重点,有兴趣的朋友可以访问JAVA夜无眠的博客JAVA NIO 实例。
二、 NIO框架简介
在Java社区,最知名的开源Java NIO框架要属Mina和Netty。实际上,Netty的作者原来就是Mina作者之一,所以可以想到,Netty和Mina在设计理念上会有很多共同点。而本文主要介绍的是使用netty搭建简单的游戏服务器,对于netty与mina的比较以及简单netty应用教程,将在其他文章中有所提及,敬请关注!
三、 netty游戏框架搭建
a) ServerBootstrap——netty框架的总入口
作者:chenpeng
创建时间: 下午12:22:53
netty game
public class ServerTest {
public static void main(String[] args) {
DOMConfigurator.configureAndWatch("config/log4j.xml");
ApplicationContext factory = new FileSystemXmlApplicationContext(
new String[] { "config/propholder.xml" });
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
ServerPipelineFactory httpServerPipelineFactory=(ServerPipelineFactory)factory.getBean("serverPipelineFactory");
bootstrap.setPipelineFactory(httpServerPipelineFactory);
//启动端口 8888
bootstrap.bind(new InetSocketAddress(8888));
System.out.print("8888
server is starting……");
b) ChannelPipeline
channelPipeline是一系列channelHandler的集合,他参照J2ee中的Intercepting Filter模式来实现的,让用户完全掌握如果在一个handler中处理事件,同时让pipeline里面的多个handler可以相互交互。
import org.jboss.netty.channel.ChannelP
import org.jboss.netty.channel.ChannelPipelineF
import org.jboss.netty.channel.C
import com.cp.netty.coder.D
import com.cp.netty.coder.E
作者:chenpeng
创建时间: 上午11:28:56
channelPipeline是一系列channelHandler的集合,他参照J2ee中的Intercepting Filter模式来实现的,
让用户完全掌握如果在一个handler中处理事件,同时让pipeline里面的多个handler可以相互交互
public class ServerPipelineFactory implements ChannelPipelineFactory {
public ServerHandler serverH
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeLine = Channels.pipeline();
pipeLine.addLast("decoder", new Decoder(Integer.MAX_VALUE, 0, 4));
pipeLine.addLast("encoder", new Encoder(4));
pipeLine.addLast("handler", serverHandler);
return pipeL
public ServerHandler getServerHandler() {
return serverH
public void setServerHandler(ServerHandler serverHandler) {
this.serverHandler = serverH
c) Decoder——消息解码器
Decoder解码器继承于FrameDecoder,FrameDecoder是Netty codec包中的辅助类,它是个ChannelUpstreamHandler,decode方法是FrameDecoder子类需要实现的。在本程序采用的是LengthFieldBasedFrameDecoder。LengthFieldBasedFrameDecoder是基于长度字段的解码器。如果协议格式类似“内容长度”+内容、“固定头”+“内容长度”+动态内容这样的格式,就可以使用该解码器 。至于其他类型的解码器,这里不再一一介绍。
import org.jboss.netty.buffer.ChannelB
import org.jboss.netty.channel.C
import org.jboss.netty.channel.ChannelHandlerC
import org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameD
作者:chenpeng
创建时间: 上午11:22:14
协议解码器
public class Decoder extends LengthFieldBasedFrameDecoder {
// 第一个参数为信息最大长度,超过这个长度回报异常,
// 第二参数为长度属性的起始(偏移)位,我们的协议中长度是0到第3个字节,所以这里写0,
// 第三个参数为“长度属性”的长度,我们是4个字节,所以写4,
// 第四个参数为长度调节值,在总长被定义为包含包头长度时,修正信息长度,
// 第五个参数为跳过的字节数,根据需要我们跳过前4个字节,以便接收端直接接受到不含“长度属性”的内容。
public Decoder(int maxFrameLength, int lengthFieldOffset,
int lengthFieldLength) {
super(maxFrameLength, lengthFieldOffset, lengthFieldLength);
protected Object decode(ChannelHandlerContext ctx, Channel channel,
ChannelBuffer buffer) throws Exception {
ChannelBuffer buffs = (ChannelBuffer)super.decode(ctx, channel, buffer);
d) ServerHandler——消息分发器
在介绍这个类之前,先对几个概念进行简要说明:
1. Channel:channel 是负责数据读、写的对象。channel是双向的,既可以write 也可以read。而且在NIO中用户不应该直接从channel中读写数据,而是应该通过buffer,通过buffer再将数据读写到channel中。
一个channel 可以提供给用户下面几个信息
(1)channel的当前状态,比如open 还是closed
(2)ChannelConfig对象,表示channel的一些参数,比如bufferSize
(3)channel支持的所有i/o操作(比如read,write,connect.bind)
2. channelEvent:ChannelEvent广义的认为Channel相关的事件处理。他分为Upstream events和downstream events两大块。如果以服务器端为主体,那么client到server的数据传输过程是Upstream,而server到client的数据传输过程则是downstream;以客户端为主体的过程正好相反。一下主要介绍以服务器端为主体的开发。
3. 常用的Upstream events包括
a) messageReceived:信息被接受时 ---MessageEvent
b) exceptionCaught:产生异常时 ---ExceptionEvent
c) channelOpen:channel被开启时 ---ChannelStateEvent
d) channelClosed:channel被关闭时 ---ChannelStateEvent
e) channelBound:channel被开启并准备去连接但还未连接上的时候 ---ChannelStateEvent
f) channelUnbound:channel被开启不准备去连接时候 ---ChannelStateEvent
g) channelConnected:channel被连接上的时候 ---ChannelStateEvent
h) channelDisconnected:channel连接断开的时候 ---ChannelStateEvent
在本游戏架构里,ServerHandler扮演着创建线程、验证消息、分发消息的重要角色,程序如下:
import java.util.concurrent.ConcurrentLinkedQ
import org.apache.log4j.L
import org.jboss.netty.buffer.ChannelB
import org.jboss.netty.channel.ChannelHandlerC
import org.jboss.netty.channel.ChannelStateE
import org.jboss.netty.channel.ExceptionE
import org.jboss.netty.channel.MessageE
import org.jboss.netty.channel.SimpleChannelUpstreamH
import com.cp.game.HandlerD
import com.cp.game.domain.MessageQ
import com.cp.netty.domain.GameR
作者:chenpeng
创建时间: 下午12:02:52
游戏协议接收分发器
public class ServerHandler extends SimpleChannelUpstreamHandler {
public Logger log = Logger.getLogger(this.getClass());
public static HandlerDispatcher handlerD
public void init() {
new Thread(handlerDispatcher).start();
/* (non-Javadoc)
* @see org.jboss.netty.channel.SimpleChannelUpstreamHandler#channelConnected(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.ChannelStateEvent)
* 建立一个新channel
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
log.debug("进来一个channel:" + ctx.getChannel().getId());
MessageQueue messageQueue = new MessageQueue(
new ConcurrentLinkedQueue&GameRequest&());
handlerDispatcher.addMessageQueue(ctx.getChannel().getId(), messageQueue);
/* (non-Javadoc)
* @see org.jboss.netty.channel.SimpleChannelUpstreamHandler#channelDisconnected(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.ChannelStateEvent)
* 玩家主动关闭channel
public void channelDisconnected(ChannelHandlerContext ctx,
ChannelStateEvent e) throws Exception {
log.error("关掉一个channel:" + ctx.getChannel().getId());
handlerDispatcher.removeMessageQueue(e.getChannel().getId().toString());
e.getChannel().close();
/* (non-Javadoc)
* @see org.jboss.netty.channel.SimpleChannelUpstreamHandler#exceptionCaught(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.ExceptionEvent)
* 玩家被动关闭channel
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception {
log.error("出异常啦……" + ctx.getChannel().getId());
e.getCause().printStackTrace();
handlerDispatcher.removeMessageQueue(e.getChannel().getId().toString());
e.getChannel().close();
/* (non-Javadoc)
* @see org.jboss.netty.channel.SimpleChannelUpstreamHandler#messageReceived(org.jboss.netty.channel.ChannelHandlerContext, org.jboss.netty.channel.MessageEvent)
* 消息接收处理器
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
throws Exception {
ChannelBuffer buffs = (ChannelBuffer) e.getMessage();
buffs.skipBytes(4);// 越过dataLength的字节
byte[] decoded = new byte[buffs.readableBytes()];
buffs.readBytes(decoded);
GameRequest gameRequest = new GameRequest(e.getChannel(), decoded);
// 通知回调协议
handlerDispatcher.addMessage(gameRequest);
public HandlerDispatcher getHandlerDispatcher() {
return handlerD
public void setHandlerDispatcher(HandlerDispatcher handlerDispatcher) {
ServerHandler.handlerDispatcher = handlerD
}
需要注意的是:HandlerDispatcher是一个多线程处理器,用于处理游戏逻辑请求。这部分功能可根据用户的不同需求进行定制。
e) Encoder——消息编码器
消息编码器主要完成的是对游戏逻辑处理器返回的数据进行编码,组合成符合客户端规范的消息格式并发送。
import org.jboss.netty.buffer.ChannelB
import org.jboss.netty.buffer.ChannelB
import org.jboss.netty.channel.C
import org.jboss.netty.channel.ChannelHandlerC
import org.jboss.netty.handler.codec.frame.LengthFieldP
import com.cp.netty.domain.GameR
作者:chenpeng
创建时间: 上午11:43:11
public class Encoder extends LengthFieldPrepender {
public Encoder(int lengthFieldLength) {
super(lengthFieldLength);
protected Object encode(ChannelHandlerContext cxt, Channel channel,
Object msg) throws Exception {
ChannelBuffer buffer = ChannelBuffers.dynamicBuffer(channel.getConfig().getBufferFactory());
GameResponse response = (GameResponse)
buffer.writeInt(response.getRtMessage().length+20);
buffer.writeInt(response.getCommondId());
buffer.writeInt(response.getPlayerId());
buffer.writeInt(response.getCommandType());
buffer.writeLong(response.getTime());
System.out.println("send message "+response.getCommondId());
buffer.writeBytes(response.getRtObj().getBytesM());
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"&
&bean id="serverPipelineFactory"
class="com.cp.netty.ServerPipelineFactory"
scope="prototype"&
&property name="serverHandler" ref="appHandler"&&/property&
&bean id="appHandler" class="com.cp.netty.ServerHandler"
init-method="init"&
&property name="handlerDispatcher" ref="handlerDispatcher" /&
&bean id="handlerDispatcher"
class="com.cp.game.HandlerDispatcher" init-method="init"
destroy-method="stop"&
&property name="messageExecutor"&
&bean class="com.cp.netty.domain.FiexThreadPoolExecutor"
destroy-method="shutdown"&
&constructor-arg
value="${app.dispatcher.pool.corePoolSize}" /&
&constructor-arg
value="${app.dispatcher.pool.maximumPoolSize}" /&
&constructor-arg
value="${app.dispatcher.pool.keepAliveSecond}" /&
&/property&
&property name="sleepTime" value="${app.dispatcher.sleepTime}" /&
&property name="handlerMap" ref="serverHandlerMapping" /&
&bean id="serverMainController" class="com.cp.game.ServerMainHandler"
abstract="true"&
&bean id="serverHandlerMapping" class="java.util.HashMap"&
&constructor-arg&
&!-- 测试协议 --&
&entry key="1000"&
class="com.cp.game.handler.common.InitHandler"
parent="serverMainController"&
&/constructor-arg&
下载次数: 2211
浏览 46190
楼主,想请教一下,服务端将channal保存起来,用来实时写回数据到客户端,channnal本身是由框架管理的,当连接数很多时是否会被框架释放掉,而保存的副本却没有释放,从而引起一些异常现象,比如连接看上去没问题,但两边却不能传数据。我是初学服务器编程,可能基本概念不是很清楚,求指导。没遇到过这种情况。
cpjsjxy 写道bluky999 写道cpjsjxy 写道bluky999 写道netty 3 ?难怪不兼容。。。这是2012年的博客了& 了解,呵 稍后发个基于netty4.0的版本&&& HandlerDispatcher 和 MessageQueue 可以发一下& 看4.0的版本吧
bluky999 写道cpjsjxy 写道bluky999 写道netty 3 ?难怪不兼容。。。这是2012年的博客了& 了解,呵 稍后发个基于netty4.0的版本&&& HandlerDispatcher 和 MessageQueue 可以发一下&
cpjsjxy 写道bluky999 写道netty 3 ?难怪不兼容。。。这是2012年的博客了& 了解,呵 稍后发个基于netty4.0的版本
bluky999 写道netty 3 ?难怪不兼容。。。这是2012年的博客了& 了解,呵
netty 3 ?难怪不兼容。。。这是2012年的博客了
请问ServerHandler的init()方法在哪里调用?配置文件里加载时调用的!
& 上一页 1
浏览: 278236 次
来自: 北京
netty等视频java.5d6b.com教程
学习了~~
不错,学习了~~
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 50个室内趣味游戏活动 的文章

 

随机推荐