nginx关闭websocket

今天在nginx下调试出现了这个问题->WebSocket connection to failed: Close received after close , 原因浏览器在close 命令发送后, 没有收到服务器关闭消息之前, 服务器提前关闭这个流。 需要我们仔细看代码, 一定要把代码写在对的位置。

3691a86048b25d7cbcc15dc87282c4a9a4d.jpg

原因是同步的代码要比异步的提前执行。修改后的代码。

	        
	        while (true)  {
	            
	            if (this.websocket == null) { /**关闭连接后信号退出*/
	                break
	            }
	            
                __asm__ ("local data, type, err = this.websocket:recv_frame()")
                
                if(type == "close") {
                    this.decr ();
                    if(this.zero() && this.websocket != null) {/**关闭连接后信号退出*/
                        this.close(1000)
                    }
                    break
                }
                
                if(type == "ping") {
                    __asm__("local bytes, err = this.websocket:send_pong(data)")
                    
                    if(bytes == false) {
                        ngx.log(ngx.ERR, "failed to send frame: ", err)
                        break
                    }
                } else {
                    if(type == "text" && this.onmessage != null) {
                            this.onmessage (data);
                    } 
                }
	        } //---end while

另外在nginx的异步体系下, 要了解事件的生命周期,需要转换思维。

 


var ns = exports.createNamespace("core");


var forbid = ns.forbid();
ngx.log(ngx.ERR, "##forbid = " , forbid)  ;

限制
if(!forbid){
     ngx.log(ngx.ERR, "ERROR:only one client by ip..")
     ngx.exit(403);
}

var server = new exports.core.ServerWebSocket ()
server.onclose   = function () {
    ns.release();   
    
}

server.onmessage = function (message) {
   
    ns.log(server, message);
    //server.sendmessage(message)
}

server.start(15000, 100)

 

转载于:https://my.oschina.net/littlemonkeyc/blog/1827869

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值