cocos + KBEngine 微信小游戏 - 兼容wss通讯方式

微信小游戏的域名只支持 https (wx.request、wx.uploadFile、wx.downloadFile) 和 wss (wx.connectSocket) 协议;所以我们的服务器打算使用nginx反向代理https/wss。

准备

准备好域名,并且经过ICP备案

配置管理后台

在小游戏后台设置服务器的socket合法域名,把我们与服务器通讯的地址加进去
注意:域名必须经过 ICP 备案;

配置服务器

1.首先申请Https证书,阿里云有免费的可以先购买使用(域名类型:单域名; 证书类型:dv ssl; 加密等级:免费版)
2.拿到证书后绑定我们之前准备好的域名
3.选择nginx证书下载,可以对证书重命名后准备使用
4.服务器安装nginx
5.打开nginx的配置文件 nginx.conf,找到443所在的server块进行配置

	# 新增login_addr块
	upstream login_addr {
        server 127.0.0.1:20013 weight=1;
    }

	server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  xxxx;     # 这里配置你的域名
        root         /usr/share/nginx/html;

		# 把你下载的证书上传到服务器,并且指定路径
        ssl_certificate "/etc/nginx/ssl/server.crt";		# 根据你的证书路径设置
        ssl_certificate_key "/etc/nginx/ssl/server.key";	# 根据你的证书路径设置
        
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
		
		# 设计思想:nginx对我们来说只是一个转发的功能,但为了对登录做一个负载均衡,
		# 所以决定把与login的通讯和base的通讯区分开,给出的方案是修改客户端登录的连接信息
		# 通过请求信息来决定如何转发
		# 服务器对应的配置就有了下面俩个块 /loginapp 和 /baseapp
        location /loginapp {
        	# 指定我们上面定义的地址,摘出来的目的是为了负载均衡
            proxy_pass http://login_addr;
            
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        }
		
		# 由于KBEngine的baseapp本身就是负载均衡的,所以对baseapp,主需要原样转发即可
		# 我目前只使用了一台机器,所以这里转发的地址是 127.0.0.1
        location /baseapp {
            proxy_pass http://127.0.0.1:$arg_port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "Upgrade";
        }
    }

6.重启nginx

客户端适配

1.修改客户端js插件

	// 修改 getServerAddr 函数
	// 修改的结果是如果不启动wss连接,地址保持不变
	// 如果启动wss连接,连接请求地址将被改成下面形式
	// wss://域名/loginapp?port=20013
	// wss://域名/baseapp?port=20013 
	// 也就是我们设置nginx时新增的那俩个块形式
	this.getServerAddr = function(ip, port, app)
	{
		var serverAddr = KBEngine.app.protocol + ip;
		
		if(KBEngine.app.isWss) {
			serverAddr += '/'+ app + '?port=' + port;
		}
		else if(port != "")
		{
			serverAddr += ":" + port;
		}
		
		return serverAddr;
	}
	
	// 接下来修改 getServerAddr 调用的地方,添加第三个参数
	// 该参数使用 KBEngine.app.currconnect将要被赋值的值
	// 示例如下:
	this.login_loginapp = function(noconnect)
	{  
		if(noconnect)
		{
			var serverAddr = this.getServerAddr(KBEngine.app.ip, KBEngine.app.port, "loginapp");
			KBEngine.INFO_MSG("KBEngineApp::login_loginapp: start connect to " + serverAddr + "!");
			KBEngine.app.currconnect = "loginapp";	
		}
	}

2.客户端在初始化KBEngine时 设置使用wss连接

启动服务器,客户端连接测试!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值