1 | # 更新日志
|
2 |
|
3 | 2017.5.11
|
4 | 1、新增WebSocket接口
|
5 | 2、引入服务器之间RPC机制
|
6 | 3、添加后台管理界面
|
7 |
|
8 | 2017.5.12
|
9 | 1、完善注册判断,避免混服现象
|
10 |
|
11 | 2017.5.14
|
12 | 服务端框架扩展:
|
13 | 1、整合短连、长连的路由和报文解析
|
14 | 2、封装RPC调用机制
|
15 | 3、完善后台管理平台的功能
|
16 |
|
17 | 2017.5.26: events目录下放置 Logic Server 内部使用的消息句柄文件,对应的消息类型为消息句柄文件的局部路径拼接字符串(从events开始)
|
18 | 例如:
|
19 | user/afterLogin.js输出 handle 函数,作为对"user.afterLogin"消息的处理句柄
|
20 | socket/userKick.js输出 handle 函数,作为对"socket.userKick"消息的处理句柄
|
21 |
|
22 | 注:理论上目录可以无穷嵌套,但必须能准确表达消息的合理分类
|
23 | 注:句柄文件中的this指针由外部注入,指向Facade门面对象
|
24 |
|
25 | 2017.5.58:
|
26 | 1、新增关卡管理系统
|
27 | 2、新增体力值
|
28 | 3、新增家族系统
|
29 |
|
30 | 2017.5.30:
|
31 | 1、新增回头率统计数据
|
32 | 2、新增注册、消费、在线统计数据
|
33 |
|
34 | @note:Sequelize模型中,默认必须存在id字段作为Primary key,如果无此字段会造成插入异常
|
35 |
|
36 | 2017.6.29:
|
37 | 1、新增分段积分系统
|
38 | 2、新增新手引导管理系统
|
39 |
|
40 | 2017.6.30:
|
41 | 1、普查所有await语句,添加try结构,预防未处理的reject导致系统异常
|
42 | 2、核查内部RPC机制,避免内部通讯异常导致的功能失灵
|
43 |
|
44 | 2017.7.2:
|
45 | 1、好友在线状态显示问题:用户上线时看到的好友在线状态都是离线,要等到好友重新上线后才会更新为在线
|
46 | 2、头像图片服务器偶尔报异常:使用Request取代了原先的Promise模式
|
47 | 3、好友列表分数为0
|
48 | 4、好友中出现自己
|
49 | 5、好友排行中重复出现
|
50 | 6、好友界面头像可能没有
|
51 |
|
52 | 2017.7.12:
|
53 | mysql>show variables like 'max_connections'; (查可以看当前的最大连接数)
|
54 | msyql>set global max_connections=1000; (设置最大连接数为1000,可以再次查看是否设置成功)
|
55 | npm list 检查下依赖关系,对缺失的包手工安装下。
|
56 |
|
57 | 2017.8.13:
|
58 | 1、新增CLI应用,可以向运行中的程序发布实时指令,例如:关闭Socket接口、强制保存用户数据,最后关闭进程
|
59 |
|
60 | 2017.8.26 Redis客户端整改方案:
|
61 | 1、找出数据更新不及时、失败的深层原因,了解Node-Redis的断线重连机制
|
62 | 2、对Redis常用功能进一步封装,包括哈希、集合、KV,以及游标操作
|
63 | 3、应对Node异步操作可能带来的数据同步问题
|
64 |
|
65 | 2017.12.2
|
66 | 1、对框架进行封装,重新划分目录,更好的区隔框架代码和用户自定义代码
|
67 |
|
68 | 2017.12.4
|
69 | 准备采用React,重构配套的管理后台框架
|
70 | nightmare e2e mock
|
71 |
|
72 | 2017.12.27
|
73 | openssl genrsa 1024 > key.pem
|
74 | openssl req -x509 -new -key key.pem > key-cert.pem
|
75 |
|
76 | Linux 下的工具们通常使用 base64 编码的文本格式,相关常用后缀如下:
|
77 | * .key:私钥
|
78 | * .csr: 证书请求, CA签名后成为证书
|
79 | * .crt, .pem:证书
|
80 | * der - 二进制编码格式
|
81 | * pem - base64编码格式
|
82 |
|
83 | 在生成证书的过程中真正要填的是Common Name,通常填写服务器域名或服务器IP地址
|
84 |
|
85 | 2017.12.28
|
86 |
|
87 | 1、使用 node-http-proxy 实现反向代理
|
88 | 安装:
|
89 | ```bash
|
90 | npm install http-proxy
|
91 | ```
|
92 | 2、代码示例:
|
93 | ```javascript
|
94 | var http = require('http'), httpProxy = require('http-proxy');
|
95 |
|
96 | // 新建一个代理 Proxy Server 对象
|
97 | var proxy = httpProxy.createProxyServer({});
|
98 |
|
99 | // 捕获异常
|
100 | proxy.on('error', function (err, req, res) {
|
101 | res.writeHead(500, {
|
102 | 'Content-Type': 'text/plain'
|
103 | });
|
104 | res.end('Something went wrong. And we are reporting a custom error message.');
|
105 | });
|
106 |
|
107 | // 另外新建一个 HTTP 80 端口的服务器,也就是常规 Node 创建 HTTP 服务器的方法。
|
108 | // 在每次请求中,调用 proxy.web(req, res config) 方法进行请求分发
|
109 | var server = require('http').createServer(function(req, res) {
|
110 | // 在这里可以自定义你的路由分发
|
111 | var host = req.headers.host, ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
|
112 | console.log("client ip:" + ip + ", host:" + host);
|
113 |
|
114 | switch(host){
|
115 | case 'aaaa.com':
|
116 | proxy.web(req, res, { target: 'http://127.0.0.1:81' });
|
117 | break;
|
118 |
|
119 | case 'ddd.com':
|
120 | if(req.url.indexOf('/news') != -1){
|
121 | res.writeHead(302, {
|
122 | 'Location': 'http://127.0.0.1:82/news/'
|
123 | });
|
124 | res.end();
|
125 | }else{
|
126 | proxy.web(req, res, { target: 'http://127.0.0.1:83' });
|
127 | }
|
128 | break;
|
129 |
|
130 | default:
|
131 | res.writeHead(200, {
|
132 | 'Content-Type': 'text/plain'
|
133 | });
|
134 | res.end('Welcome to my server!');
|
135 | break;
|
136 | }
|
137 | });
|
138 |
|
139 | console.log("listening on port 80")
|
140 | server.listen(80);
|
141 | ```
|
142 |
|
143 | #2018-01-28
|
144 | 如果在两个模块中相互引入对方,则极有可能导致引入异常,比如引入的类变为 {} 这样的结构,这可能是编译器为了避免更为严重的后果(例如死循环)而做的设定。
|