gamecloud
Version:
game logic server over cloud
145 lines (115 loc) • 5.4 kB
Markdown
# 更新日志
2017.5.11
1、新增WebSocket接口
2、引入服务器之间RPC机制
3、添加后台管理界面
2017.5.12
1、完善注册判断,避免混服现象
2017.5.14
服务端框架扩展:
1、整合短连、长连的路由和报文解析
2、封装RPC调用机制
3、完善后台管理平台的功能
2017.5.26: events目录下放置 Logic Server 内部使用的消息句柄文件,对应的消息类型为消息句柄文件的局部路径拼接字符串(从events开始)
例如:
user/afterLogin.js输出 handle 函数,作为对"user.afterLogin"消息的处理句柄
socket/userKick.js输出 handle 函数,作为对"socket.userKick"消息的处理句柄
注:理论上目录可以无穷嵌套,但必须能准确表达消息的合理分类
注:句柄文件中的this指针由外部注入,指向Facade门面对象
2017.5.58:
1、新增关卡管理系统
2、新增体力值
3、新增家族系统
2017.5.30:
1、新增回头率统计数据
2、新增注册、消费、在线统计数据
@note:Sequelize模型中,默认必须存在id字段作为Primary key,如果无此字段会造成插入异常
2017.6.29:
1、新增分段积分系统
2、新增新手引导管理系统
2017.6.30:
1、普查所有await语句,添加try结构,预防未处理的reject导致系统异常
2、核查内部RPC机制,避免内部通讯异常导致的功能失灵
2017.7.2:
1、好友在线状态显示问题:用户上线时看到的好友在线状态都是离线,要等到好友重新上线后才会更新为在线
2、头像图片服务器偶尔报异常:使用Request取代了原先的Promise模式
3、好友列表分数为0
4、好友中出现自己
5、好友排行中重复出现
6、好友界面头像可能没有
2017.7.12:
mysql>show variables like 'max_connections'; (查可以看当前的最大连接数)
msyql>set global max_connections=1000; (设置最大连接数为1000,可以再次查看是否设置成功)
npm list 检查下依赖关系,对缺失的包手工安装下。
2017.8.13:
1、新增CLI应用,可以向运行中的程序发布实时指令,例如:关闭Socket接口、强制保存用户数据,最后关闭进程
2017.8.26 Redis客户端整改方案:
1、找出数据更新不及时、失败的深层原因,了解Node-Redis的断线重连机制
2、对Redis常用功能进一步封装,包括哈希、集合、KV,以及游标操作
3、应对Node异步操作可能带来的数据同步问题
2017.12.2
1、对框架进行封装,重新划分目录,更好的区隔框架代码和用户自定义代码
2017.12.4
准备采用React,重构配套的管理后台框架
nightmare e2e mock
2017.12.27
openssl genrsa 1024 > key.pem
openssl req -x509 -new -key key.pem > key-cert.pem
Linux 下的工具们通常使用 base64 编码的文本格式,相关常用后缀如下:
* .key:私钥
* .csr: 证书请求, CA签名后成为证书
* .crt, .pem:证书
* der - 二进制编码格式
* pem - base64编码格式
在生成证书的过程中真正要填的是Common Name,通常填写服务器域名或服务器IP地址
2017.12.28
1、使用 node-http-proxy 实现反向代理
安装:
```bash
npm install http-proxy
```
2、代码示例:
```javascript
var http = require('http'), httpProxy = require('http-proxy');
// 新建一个代理 Proxy Server 对象
var proxy = httpProxy.createProxyServer({});
// 捕获异常
proxy.on('error', function (err, req, res) {
res.writeHead(500, {
'Content-Type': 'text/plain'
});
res.end('Something went wrong. And we are reporting a custom error message.');
});
// 另外新建一个 HTTP 80 端口的服务器,也就是常规 Node 创建 HTTP 服务器的方法。
// 在每次请求中,调用 proxy.web(req, res config) 方法进行请求分发
var server = require('http').createServer(function(req, res) {
// 在这里可以自定义你的路由分发
var host = req.headers.host, ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
console.log("client ip:" + ip + ", host:" + host);
switch(host){
case 'aaaa.com':
proxy.web(req, res, { target: 'http://127.0.0.1:81' });
break;
case 'ddd.com':
if(req.url.indexOf('/news') != -1){
res.writeHead(302, {
'Location': 'http://127.0.0.1:82/news/'
});
res.end();
}else{
proxy.web(req, res, { target: 'http://127.0.0.1:83' });
}
break;
default:
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Welcome to my server!');
break;
}
});
console.log("listening on port 80")
server.listen(80);
```
#2018-01-28
如果在两个模块中相互引入对方,则极有可能导致引入异常,比如引入的类变为 {} 这样的结构,这可能是编译器为了避免更为严重的后果(例如死循环)而做的设定。