Lesson Learned
最近,中兴ZTE违反美国商务部禁令,向伊朗出售敏感技术,被美国下达长达7年的禁止令,教训十分深刻。以诚待人,信守承诺,才能在商业社会站稳脚跟。
还是说说最近自己上的一课吧。上了港台服以后,奇奇怪怪的问题比较多。其中之一是玩家被异常登录了。现象是玩家登录游戏,提示账号被异常登录。这种现象本来应该在玩家顶号操作时,被顶号的设备上出现的。不应该在正在登录的活跃客户端上显示
回顾现在的登录过程,玩家连上游戏后,首先会创建一个session。登录完成后,会产生user挂在session上。最后,会找到对应的agent,在上面建立对应的role。当发生顶号的时候,会调用agent的下线流程,下线完成后,清理session。清理完成后,新玩家再执行正常登录流程
现在的问题是,下线过程中,某一步变得比平常慢非常多,结果踢人卡住了。然后再次登录,又继续走踢人流程,结果变成新用户收到了错误的顶号提示信息。。。
要彻底改掉这个问题,要么将顶号简化,变成只切换fd,不走下线流程;要么加上保护标记,玩家在下线过程里再登录,明确提示正在下线,请稍后再试。目前准备先上一些临时的解决方案,用gm指令清除已登录的标记,让玩家可以正常登,到时候覆盖之前下线存盘的数据就好。
关于某一步登出特别慢的问题,想了一下,大概有两个方向,原因差不多。一个是离线过程里,agent服务要向其他服务发起调用,如果call比较多的话,会多次挂起。每次挂起后,收到返回值,都要重新排到消息队列末尾,如果系统繁忙,这时候需要处理的消息特别多,就会出现下线的函数耗时非常久了。另一个方向,是下线的时候,要向一个热门服务发起调用,这个服务的消息队列非常长,导致响应下线请求很慢。这两个问题都涉及到协程调度的公平问题,某些场景下,协程会出现饥饿(starvation)的情况,得不到调度。如果要搞分优先级的调度,估计会变得很麻烦,这块还要再想想
Lesson Learned的更多相关文章
- 30 algorithm questions study
April 26, 2015 Spent over a few months to go over 30 questions about algorithm starting from January ...
- 调用newtonsoft.json反序列出错
调用newtonsoft.json反序列出错: Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current J ...
- Cracking Story - How I Cracked Over 122 Million SHA1 and MD5 Hashed Passwords
This is the story about how I cracked 122 million* password hashes with John the Ripper and oclHashc ...
- 深度卷积神经网络用于图像缩放Image Scaling using Deep Convolutional Neural Networks
This past summer I interned at Flipboard in Palo Alto, California. I worked on machine learning base ...
- hadoop native
http://blog.csdn.net/benben85/article/details/4161134 http://stackoverflow.com/questions/19943766/ha ...
- 执行字符串或注释代码段的方法(eval、exec、execfile)
eval:计算字符串中的表达式exec:执行字符串中的语句execfile:用来执行一个文件 需注意的是,exec是一个语句,而eval()和execfile()则是内建built-in函数. 1 2 ...
- Image Scaling using Deep Convolutional Neural Networks
Image Scaling using Deep Convolutional Neural Networks This past summer I interned at Flipboard in P ...
- German Collegiate Programming Contest 2015(第三场)
Divisions David is a young boy and he loves numbers. Recently he learned how to divide two numbers.D ...
- Codeforces Round #430 D. Vitya and Strange Lesson
Today at the lesson Vitya learned a very interesting function - mex. Mex of a sequence of numbers is ...
随机推荐
- python 调用js代码
Python2 安装pyv8 pip install-egit://github.com/brokenseal/PyV8-OS-X#egg=pyv8 from pyv8 import PyV8 c ...
- C# json转model 以及model转json
1.json转model TestModel tm = new TestModel(); JavaScriptSerializer js = new JavaScriptSerializer();tm ...
- JS-4-if
流程控制结构1 顺序结构 alert(10); alert(20);2 分支结构(选择结构) * IF 2.1 if(条件) { 条件成立时执行的语句 } else { 条件不成立时执行的语句 } ...
- LCT模板(无讲解)
怎么说呢,照着打一遍就自然理解了,再打一遍就会背了,再打一遍就会推了. // luogu-judger-enable-o2 #include<bits/stdc++.h> using na ...
- vue+uwsgi+nginx部署前后端分离项目
前后端分离,vue前端提供静态页面,且可以向后台发起get,post等restful请求. django后台提供数据支撑,返回json数据,返回给vue,进行数据页面渲染 后端 创建虚拟环境 解决dj ...
- Double H
##Double H Team 1.队员 王熙航211606379(队长) 李冠锐211606364 曾磊鑫211606350 戴俊涵211606359 聂寒冰211606324 杨艺勇2116063 ...
- 第四周博客之一---Linux的基本命令(前5个)
一.Linux的系统结构 "/"根目录部分有以下子目录: 1./bin:系统启动时需要的执行文件(二进制),这些文件可以被普通用户使用. 2./boot:用于自举加载程序(LILO ...
- leetcode python 037 求解数独
import numpy as npimport syssys.setrecursionlimit(1000) #例如这里设置为一百万 def get1(n): if n<3: ...
- Delphi中播放Flash
在delphi中可以直接打开flash动画,并控制它播放和停止,还可以得到它的总帧数. 具体操作步骤:①Component -> Import ActiveX Contrals -> Sh ...
- shiro的单机版 和 集群版
在我们的开发当中 我们一般权限都是个 比较繁琐 但又必不可少的 一部分 [不管我们的 数据库设计 还是我们采用何种技术 我们的权限库表 大多都是大同小异 业务逻辑也是如此] 在我们不使用任何框架 ...