游戏的linux多线程服务器编程pdf怎么如何设计

游戏服务器多线程设计问题
[问题点数:40分]
游戏服务器多线程设计问题
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|&>&基于Java的多线程并发服务器的设计与应用
基于Java的多线程并发服务器的设计与应用
上传大小:209KB
:文章讨论了多线程并发服务器设计与实现所涉及到的相关知识和编程基础,并用Java实现了一个围棋和Aft-棋
多线程并发服务器。五子棋服务器提供的服务是客户端(人)和服务器端(机器)对弈;围棋服务器是为两客户对弈提供一
个中间通信平台,围棋客户端是一个模拟棋室,共有4个棋桌和8个座位,能同时有4对棋手对弈并允许多人观看。
综合评分:3
下载个数:
由于版权原因,该资源暂不支持下载!
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有4条
实际作用不大
名字比较霸气,但没有实际实现的内容,只是做了简单概括的介绍。
没什么实际作用
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
基于Java的多线程并发服务器的设计与应用
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
basten0926
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
基于Java的多线程并发服务器的设计与应用网络游戏服务器端的设计与实现_图文_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
网络游戏服务器端的设计与实现
&&网络游戏服务器端的设计与实现
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩80页未读,
定制HR最喜欢的简历
你可能喜欢下次自动登录
现在的位置:
& 综合 & 正文
基于MYSQL的 网络游戏 多线程 数据库 服务器 设计与实现
的性能很赞,但要是这样游戏有个几万人在线,数据库服务器肯定吃不消。得益于innodb
的行锁支持,很多数据库的请求都是可以被并行处理的,比如两个角色A
同时登录,进行登录验证并且获取角色列表请求,角色A
数据是完全不相干的,所有可以并行处理。
多个工作线程,并行处理
数据库操作API
用预处理方式(mysql_stmt_*
省去了解析sql
语句的工作,直接传入参数执行查询,对于大量复杂的相同查询,用预处理方式节约不少。
接下来讨论一下服务器的工作模式(
。考虑一下这样一种情况,同一个角色发送了两个请求,并且都是针对同一条数据操作,第一个写第二个读。那么为了保证数据的正确性,两个请求必须保证顺序执行。要是使用简单的生产者-
消费者模型,来一个请求,只要有空闲的工作线程就被处理,这种方式的话两个请求的执行顺序是不能保证的。这样我们必须保证同一个角色的数据请求会被顺序执行。
为了保证这一点,我们就得为每个请求加一个标记,比如角色ID
,这里称这个标记为阻塞项。用阻塞项让请求按照我们的期望顺序执行,为了避免线程竞争加锁带来的开销,可以采用boss-worker
模型,即由一个boss
线程来为其他worker
线程分配工作。
这样思路就清晰了,boss
线程从等待队列中顺序取请求,然后检查该请求是否可以被立即处理,若不可以则加入队列,等待再次调度,若可以则分配请求到一个空闲的worker
线程,分配工作后boss
线程更新当前正在被处理请求的阻塞项集合。
这里有个问题,当请求不能被立即调用时,我们先把它放入一个队列,取下一个请求再来进行相同的操作,那么什么时候再执行这些请求呢?当检查请求不能被立即执行的时候,其实我们是先跳过它,那么可以设个计数N
,从有一个请求被放入等待队列开始,再向后取N
条请求处理,这时再回过头来处理等待队列中的请求,注意处理等待队列中的请求时,boss
线程必须逐个为请求分配工作线程,若不满足执行条件,则boss
线程等待直到条件满足。
还有个细节问题如何维护正在执行的阻塞项集合?显然只有两种操作,添加和删除。当boss
线程分配工作给worker
线程时,需要添加阻塞项到阻塞项集合,这个操作不需要加锁;当worker
线程处理一个请求结束后,必须要将处理完的请求的阻塞项从集合里删除,为了避免加锁带来的开销,这个删除操作可以由boss
线程分配工作检查是否有空闲线程时,判断哪个线程的工作已经完成,然后删除对应的阻塞项。
:很多问题都是仁者见仁智者见智,相信解决方法没有最好只有更好,希望与大家多多交流。
【上篇】【下篇】}

我要回帖

更多关于 linux多线程服务器编程pdf 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信