pomelo 框架一个session bug的修复
2016-09-09 20:56
393 查看
有一种情况发生会导致如下的错误发生。这种情况发生于客户端调试状态,socket还保持连接,但是没有维持心跳包,然后客户端突然断开,而服务端还不断的往这个session发送网络数据,导致发生异常
websocket send binary data failed: "Error: not opened\n at WebSocket.send (D:\\project\\gameBilliards\\g
ame-server\\node_modules\\pomelo\\node_modules\\ws\\lib\\WebSocket.js:217:38)\n at Socket.sendRaw (D:\\project\\gameB
illiards\\game-server\\node_modules\\pomelo\\lib\\connectors\\hybridsocket.js:65:15)\n at Socket.send (D:\\project\\g
ameBilliards\\game-server\\node_modules\\pomelo\\lib\\connectors\\hybridsocket.js:84:8)\n at Session.send (D:\\projec
t\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\common\\service\\sessionService.js:517:19)\n at send (D:\\p
roject\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\common\\service\\sessionService.js:415:11)\n at Sessio
nService.sendMessage (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\common\\service\\sessionServic
e.js:347:10)\n at null.sendMessage (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\components\\s
ession.js:23:36)\n at doBatchPush (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\pushSchedulers
\\direct.js:57:20)\n at Service.schedule (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\pushSch
edulers\\direct.js:19:5)\n at PushScheduler.schedule (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\
lib\\components\\pushScheduler.js:91:22)\n at pro.send (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo
\\lib\\components\\connector.js:107:41)\n at Remote.pushMessage (D:\\project\\gameBilliards\\game-server\\node_module
s\\pomelo\\lib\\common\\remote\\frontend\\channelRemote.js:49:13)\n at pro.route (D:\\project\\gameBilliards\\game-se
rver\\node_modules\\pomelo\\node_modules\\pomelo-rpc\\lib\\rpc-server\\dispatcher.js:51:10)\n at D:\\project\\gameBil
liards\\game-server\\node_modules\\pomelo\\node_modules\\pomelo-rpc\\lib\\rpc-server\\gateway.js:23:16\n at processMs
g (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\node_modules\\pomelo-rpc\\lib\\rpc-server\\acceptors\\
ws-acceptor.js:134:15)\n at Socket.<anonymous> (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\node_m
odules\\pomelo-rpc\\lib\\rpc-server\\acceptors\\ws-acceptor.js:53:11)\n at emitOne (events.js:77:13)\n at Socket.e
mit (events.js:169:7)\n at SocketNamespace.handlePacket (D:\\project\\gameBilliards\\game-server\\node_modules\\pomel
o\\node_modules\\socket.io\\lib\\namespace.js:335:22)\n at Manager.onClientMessage (D:\\project\\gameBilliards\\game-
server\\node_modules\\pomelo\\node_modules\\socket.io\\lib\\manager.js:488:38)\n at WebSocket.Transport.onMessage (D:
\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\node_modules\\socket.io\\lib\\transport.js:387:20)\n at
Parser.<anonymous> (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\node_modules\\socket.io\\lib\\transpo
rts\\websocket\\hybi-16.js:39:10)"
修复这个bug如下,增加对socket状态的判断,如果socket在底层已经是失效的,则关闭之
代码路径为
D:\project\game\game-server\node_modules\pomelo\lib\common\service\sessionService.js
517行
Session.prototype.send = function(msg) {
//add by ysj
var WebSocket_OPEN=1;
if(this.__socket__.socket.readyState!== WebSocket_OPEN)
{
console.log('519 socket error');
this.closed('socket lost');
//this.unbind(this.uid);
return;
}
this.__socket__.send(msg);
};
websocket send binary data failed: "Error: not opened\n at WebSocket.send (D:\\project\\gameBilliards\\g
ame-server\\node_modules\\pomelo\\node_modules\\ws\\lib\\WebSocket.js:217:38)\n at Socket.sendRaw (D:\\project\\gameB
illiards\\game-server\\node_modules\\pomelo\\lib\\connectors\\hybridsocket.js:65:15)\n at Socket.send (D:\\project\\g
ameBilliards\\game-server\\node_modules\\pomelo\\lib\\connectors\\hybridsocket.js:84:8)\n at Session.send (D:\\projec
t\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\common\\service\\sessionService.js:517:19)\n at send (D:\\p
roject\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\common\\service\\sessionService.js:415:11)\n at Sessio
nService.sendMessage (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\common\\service\\sessionServic
e.js:347:10)\n at null.sendMessage (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\components\\s
ession.js:23:36)\n at doBatchPush (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\pushSchedulers
\\direct.js:57:20)\n at Service.schedule (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\lib\\pushSch
edulers\\direct.js:19:5)\n at PushScheduler.schedule (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\
lib\\components\\pushScheduler.js:91:22)\n at pro.send (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo
\\lib\\components\\connector.js:107:41)\n at Remote.pushMessage (D:\\project\\gameBilliards\\game-server\\node_module
s\\pomelo\\lib\\common\\remote\\frontend\\channelRemote.js:49:13)\n at pro.route (D:\\project\\gameBilliards\\game-se
rver\\node_modules\\pomelo\\node_modules\\pomelo-rpc\\lib\\rpc-server\\dispatcher.js:51:10)\n at D:\\project\\gameBil
liards\\game-server\\node_modules\\pomelo\\node_modules\\pomelo-rpc\\lib\\rpc-server\\gateway.js:23:16\n at processMs
g (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\node_modules\\pomelo-rpc\\lib\\rpc-server\\acceptors\\
ws-acceptor.js:134:15)\n at Socket.<anonymous> (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\node_m
odules\\pomelo-rpc\\lib\\rpc-server\\acceptors\\ws-acceptor.js:53:11)\n at emitOne (events.js:77:13)\n at Socket.e
mit (events.js:169:7)\n at SocketNamespace.handlePacket (D:\\project\\gameBilliards\\game-server\\node_modules\\pomel
o\\node_modules\\socket.io\\lib\\namespace.js:335:22)\n at Manager.onClientMessage (D:\\project\\gameBilliards\\game-
server\\node_modules\\pomelo\\node_modules\\socket.io\\lib\\manager.js:488:38)\n at WebSocket.Transport.onMessage (D:
\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\node_modules\\socket.io\\lib\\transport.js:387:20)\n at
Parser.<anonymous> (D:\\project\\gameBilliards\\game-server\\node_modules\\pomelo\\node_modules\\socket.io\\lib\\transpo
rts\\websocket\\hybi-16.js:39:10)"
修复这个bug如下,增加对socket状态的判断,如果socket在底层已经是失效的,则关闭之
代码路径为
D:\project\game\game-server\node_modules\pomelo\lib\common\service\sessionService.js
517行
Session.prototype.send = function(msg) {
//add by ysj
var WebSocket_OPEN=1;
if(this.__socket__.socket.readyState!== WebSocket_OPEN)
{
console.log('519 socket error');
this.closed('socket lost');
//this.unbind(this.uid);
return;
}
this.__socket__.send(msg);
};
相关文章推荐
- bbossgroups-1.0 rpc框架修复了一个bug(bug描述见正文)
- 2007.06.05 最佳分割阈值,修复一个bug
- 跨域session过期的BUG已经修复 Ruby on Rails - www.9fav.com
- ASIHttprequest(网络处理第三方框架)中文版 不是最新版 特别是ios5之后部分bug要修复
- 一个页面使用两次timepicker.js引起的Maximum call stack size exceeded问题解决办法及bug修复
- 修复ext4 bug一个
- 利用空余时间在完成一个Outlook框架控件,还有些Bug,完善中
- 关于WPF界面框架MahApps.Metro的一个BUG
- 修复WPF Silverlight ListBox控件的一个Bug
- 修复WPF Silverlight ListBox控件的一个Bug
- IE框架中访问不同域的网页不能带入COOKIE————是IE浏览器的一个BUG
- 修复Git打包的一个Bug
- IE框架中访问不同域的网页不能带入COOKIE————是IE浏览器的一个BUG?
- 记一个bug定位与修复过程
- 利用空余时间在完成一个Outlook框架控件,还有些Bug,完善中
- BCG库MDI中Tab子框架窗口中的控制条的一个小Bug的解决方法
- Delphi中MediaPlayer控件的一个Bug即修复
- 优秀屏幕录像软件BB FlashBack 2.2.0.459,一个小小bug!被我修复了,完美了!呵呵
- 修复Git打包的一个Bug
- 关于glusterfs-3.0.4中AFR修复的一个bug