Giter Site home page Giter Site logo

wafer's Introduction

Wafer - 快速构建具备弹性伸缩能力的微信小程序

Wafer 是腾讯云面向广大开发者提供的小程序开发全栈资源套件,套件提供小程序会话管理服务和 WebSocket 信道服务,部署方式具备良好的弹性伸缩能力,可以快速应对业务的爆发增长,同时具备较低的开发门槛。

如果你希望自己动手搭建小程序,小程序实验室将提供 step by step 的教程帮助你完成目标!

阅读 Wiki 文档了解 Wafer 提供的服务、部署方法、架构设计以及实现细节。

使用过程中若有疑问,欢迎到腾讯云开发者问答社区进行提问。

Wafer2 正式发布

开发者工具方案(以下简称 Wafer2)是 2017 年腾讯云基于原来的 Wafer 解决方案(以下简称 Wafer1)并与微信团队深度定制合作的一站式小程序解决方案,Wafer 团队基于腾讯云强大的 IaaS 能力搭建了一个 PaaS 小程序解决方案,用户只需要开通,即可使用开发者工具上传、部署、调试小程序后端代码,无需了解服务器运维、数据库部署搭建即可使用。

点击查看Wafer2 指引

Wafer1 开发者资源索引

关于 Wafer

Wafer 是一个愿景,希望可以给开发者提供到像晶片一样精致且可靠的开源项目,也希望和广大开发者一起进行打磨,打造健康的小程序全栈开发生态。

Wafer 的全称是 Weapp Application Fullstack Essential Resources,即微信小程序全栈基础资源。

关于 Wafer 的探索历程,可以阅读这篇文章

LICENSE

MIT

wafer's People

Contributors

miusuncle avatar techird avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wafer's Issues

自行部署 Wafer 的一点心得

自行部署 Wafer 的一点心得

最近以官方的demo为例配置部署wafer,实现了小程序的授权登陆、获取用户信息以及小程序websocket聊天室功能。这个过程中踩了几个小坑,特分享出来,让大家少碰壁。自行部署前最好是要弄明白wafer的业务流程,需要准备相应的服务器环境、所需的代码,以及清楚明白你需要配置什么。

一、准备工作

  • 服务器:服务器环境centOS 6.8 + php7 + nginx/1.9.10

  • wafer SDK代码,以官方demo为例 下载

  • 提供会话服务的代码 下载

  • 客户端小程序demo代码 下载

二、配置文件

1. 配置以支持https访问

如何配置免费的https,自行百度

2. 配置wafer的SDK配置文件sdk.config

新建个文本文件粘贴如下代码:

{
    "serverHost": "www.xx.com",
    "authServerUrl": "http://www.xx.com/itjaye/wafer-session-server/",
    "tunnelServerUrl": "https://ws.qcloud.com",
    "tunnelSignatureKey": "xxxxxx",
    "networkTimeout": 30000
}
  • serverHost 你的业务服务器的域名,上面部署wafer SDK代码
  • authServerUrl 会话服务地址,登陆授权会用到。上面部署会话服务的代码
  • tunnelServerUrl 这个是信道服务器地址,不需要部署,直接使用腾讯提供的信道服务器地址https://ws.qcloud.com
  • tunnelSignatureKey 修改成自己的签名秘钥,随便自己定义一个就行

将文件保存为sdk.config并上传到/etc/qcloud/sdk.config (需要在/etc/下面自己创建下qcloud这个目录)

3. 配置会话服务调用的数据库连接配置文

上线前需要在服务器如下配置

a.在数据库中创建cAuth数据库并导入根目录下的mina_auth/db.sql

b.修改wafer-session-server/system/db/db.ini代码

[db]
host = 数据库服务器IP
port = 3306
user_name = 用户名
pass_wd = 密码
data_base = cAuth

4. 配置小程序管理平台

登陆微信小程序管理平台https://mp.weixin.qq.com/ 在 『设置』-『开发设置』 里添加如下url

wss://ws.qcloud.com、https://ws.qcloud.com

5. 配置客户端代码

修改下客户端demo中的/config.js的host为你的业务服务器上wafer SDK地址

var host = 'www.xx.com/itjaye/wafer-php-server-demo';

6. 配置wafer-php-server-demo

针对 wafer-php-server-demo代码,记得先在该文件夹下执行composer install操作来安装wafer SDK

需要分配配置下SDK本身所采用的CI框架来支持伪静态,隐藏index.php

修改代码中application/config/config.php里的配置
修改26行为

    $config['base_url'] = 'https://www.xx.com/itjaye/wafer';

修改38行为

    $config['index_page'] = '';

同时,在Nginx服务器的配置文件中增加如下设置以支持ci框架的伪静态

location /itjaye/wafer/ {
			index  index.html index.php;
			if (!-e $request_filename) {
				rewrite  ^(.*)$  /tjaye/wafer/index.php?s=$1  last;
				break;
			}
        }

三、上传代码

在服务器上web根目录下创建一个文件夹,我的文件夹名为itjaye,把上面wafer-php-server-demo文件夹和wafer-session-server文件夹上传到该文件夹下即可。

四、其他问题

针对会话服务由于是php7 需要如下修改,

  • mysql 的函数换成mysqli支持,修改方法可以参考

  • 采用function __construct 构造函数来替换和类名相同的函数名

五、参考资料

https://github.com/tencentyun/wafer/wiki

有疑问的可以加官方qq群交流 216602757

自行部署的一点建议

因为服务器之前已经安装了wordpress,所以不想损坏原有数据,所以选择自行部署
首先教程里面没有对数据库的设置说明,所以刚开始没有修改,每次调试就会爆出NO_APPID的错误
修改db.ini文件后,请求直接ERR500,说明php程序出现了问题
通过调出apache的log文档发现sessionserver里面的log.php的line241出现问题,mkdir被拒绝
这里直接把mkdir的0755参数改成0777,这个创建文件夹的问题解决
那么log.php出现问题,说明程序时出现异常被捕获的,再次观察发现一个关于curl的函数未被定义
直接apt-get install php5-curl解决

总的建议
一个把php的一些常见依赖安装好,包括curl, mysql等
再就是读取apache的log文档和自身server的log文档

1台服务器可以部署么

大部分用户,没有很大流量,乞丐版怎样配置?一台服务器 一个负载均衡是不是就可以

weapp-out.log大量重复日志

业务服务器安装wafer demo后,日志输出在~/.pm2/logs/目录,发现在weapp-out.log里有大量的类似下面的日志:
HEAD / 200 1380 - 0.319 ms
HEAD / 200 1380 - 0.268 ms
HEAD / 200 1380 - 0.333 ms
.
.
.

这是哪个地方的语句输出的日志?

重新发起授权。

“会员机制是关联微信授权登录的,如果用户点击拒绝登录后,后边的流程无法继续走下去,当用户拒绝授权登陆后,如何重新发起授权呢?”
求教。

腾讯云一站式部署后无法访问

使用微信小程序的一站式部署之后,在微信Web开发者工具中无法访问,登录时显示"detail":{"errMsg":"getUserInfo:fail auth deny"}}。 在浏览器中访问域名出现404

购买完成后配置完成,出现鉴权失败

<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Notice</p>
<p>Message:  Undefined index: signature</p>
<p>Filename: Tunnel/TunnelService.php</p>
<p>Line Number: 94</p>


	<p>Backtrace:</p>
	
		
	
		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php<br />
			Line: 94<br />
			Function: _error_handler			</p>

		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php<br />
			Line: 17<br />
			Function: handleGet			</p>

		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/application/controllers/Tunnel.php<br />
			Line: 11<br />
			Function: handle			</p>

		
	
		
	
		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/index.php<br />
			Line: 328<br />
			Function: require_once			</p>

		
	

</div>
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">

<h4>A PHP Error was encountered</h4>

<p>Severity: Notice</p>
<p>Message:  Array to string conversion</p>
<p>Filename: Tunnel/Signature.php</p>
<p>Line Number: 11</p>


	<p>Backtrace:</p>
	
		
	
		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/vendor/qcloud/weapp-sdk/lib/Tunnel/Signature.php<br />
			Line: 11<br />
			Function: _error_handler			</p>

		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/vendor/qcloud/weapp-sdk/lib/Tunnel/Signature.php<br />
			Line: 23<br />
			Function: compute			</p>

		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php<br />
			Line: 97<br />
			Function: check			</p>

		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/vendor/qcloud/weapp-sdk/lib/Tunnel/TunnelService.php<br />
			Line: 17<br />
			Function: handleGet			</p>

		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/application/controllers/Tunnel.php<br />
			Line: 11<br />
			Function: handle			</p>

		
	
		
	
		
	
		
			<p style="margin-left:10px">
			File: /data/release/php-weapp-demo/index.php<br />
			Line: 328<br />
			Function: require_once			</p>

		
	

</div>{"error":"签名校验失败"}

1005错误是怎么导致的?

INFO|2017-08-26 11:57:27.888572|/opt/lampp/htdocs/mina_auth/index.php:13|{"returnCode":1005,"returnMessage":"WEIXIN_NET_ERR","returnData":"","version":1,"componentName":"MA"}
照文档,这是无法连接微信服务器,为什么无法连接?
我之前域名曾经因为没有实名认证而被停止解析,但是后来完成了实名认证之后就好了。而且按道理会话服务器和域名无关,域名现在解析的是负载均衡,而负载均衡只连接到业务服务器。
所以问题到底出在哪儿?
前几天我的数据库过期了,我把会话服务器里的mysql搞定了,然后直接连接到这个数据库,该建的表也建了,该插的记录也插了。secret也换了,怎么就不行呢?

Wafer

小程序解决方案代号 wafer,需要进行开源仓库升级和文档工作。

代码仓库迁移

原有代码仓库使用 Github Rename 功能进行迁移,能保证原访问地址可以重定向到新地址。

需要迁移的仓库包括:

文档修改

修改点:

  • 更新每个仓库文档的连接,确保连接到 wafer 仓库
  • 重新 Review 技术文档,确保开发者可以从任意入口获取到 wafer 的全景资料,减少弯路

需要修改的文档:

  • Wafer Readme 文档
  • Wiki 文档
    • 技术架构
    • 会话服务
    • 信道服务
    • 服务端 SDK 配置
    • 镜像部署
    • 自动部署
  • PHP SDK 文档
  • Java SDK 文档
  • Node SDK 文档
  • C# SDK 文档
  • 会话服务器文档
  • 客户端 SDK 和 Demo 文档

信道连接问题请教

1.如何检测当前是否有已连接的信道?
2.信道断开后怎样在保持信道ID不变的前提下进行重新连接?
3.为什么有时候会出现信道断开的情况?是系统有默认超时的原因吗?

C#客户端

我的一个项目中,使用wafer作为服务端,客户端有小程序和C#应用程序,现在服务端和微信小程序都完成了,但现在想写C#客户端的时候发现没有相关文档可参考,请问wafer不支持C#桌面程序客户端吗?

在Apache Server(HTTPD)和Tomcat在同一台电脑搭建服务器

之前买了一个月的腾讯云部署方案,一次要买两个服务器,感觉亏得要死
因为会话服务器(准确来说是鉴权服务器)本身已经固定,而且不需要任何修改,放在额外一个服务器,十分浪费资源。
感觉可以解决用下面的方式解决:
Apache Server负责80端口的HTTP协议,运行php的会话服务器程序
Tomcat 开启SSL,将默认的8443端口改为443端口,同时部署证书,运行java业务服务器程序
在sdk.config设置里面,将authServerUrl改为
"http://localhost/mina_auth"
(mina_auth为index.php所在文件夹名称)

app.tunnel可以返回json对象 但是console.log(app.tunnel.socketUrl)显示null(看正文)

console.log(app.tunnel);
console.log(JSON.stringify(tunnel););
console.log(app.tunnel.socketUrl);

//app.tunnel
Tunnel {serviceUrl: "https://mi4yyjel.qcloud.la/weapp/tunnel", socketUrl: null, status: "CONNECTING", open: ƒ, on: ƒ, …}
close
:
ƒ close()
emit
:
ƒ emitMessagePacket(messageType, messageContent)
isActive
:
ƒ isActive()
isClosed
:
ƒ isClosed()
isConnecting
:
ƒ isConnecting()
isReconnecting
:
ƒ isReconnecting()
on
:
ƒ registerEventHandler(eventType, eventHandler)
open
:
ƒ openConnect()
serviceUrl
:
"https://mi4yyjel.qcloud.la/weapp/tunnel"
socketUrl
:
"wss://mi4yyjel.ws.qcloud.la/qcloud/ws?tunnelId=4660fd8e-da23-48ab-88fc-6cb4aecc206e&tcId=125ecb3977c2fb8b405f53f15fb52fe2"
status
:
"ACTIVE"
proto
:
Object

//app.tunnel.socketUrl
{"serviceUrl":"https://mi4yyjel.qcloud.la/weapp/tunnel","socketUrl":null,"status":"CONNECTING"}

//app.tunnel.socketUrl
null

连接信道服务失败,网络错误或者信道服务没有正确响应

微信小程序解决方案/etc/qcloud/sdk.config没有备份,怎么找回?

刚买的 小程序解决方案, 语言从php 切换到的 node.js ,
通过镜像重装了 业务服务器,
没有备份 /etc/qcloud/sdk.config ,
{

"serverHost": "业务服务器的主机名",
"authServerUrl": "鉴权服务器地址",
"tunnelServerUrl": "信道服务器地址",
"tunnelSignatureKey": "和信道服务器通信的签名密钥"
}
后面两项配置是腾讯云自动下发的,现在无法配置了。请问怎么找回原来的信道服务器地址和密钥?

获取信道连接地址接口在spring环境中无返回值的问题

获取信道连接地址接口在官方demo下可以正常发挥信道服务器连接地址。然而当我把sdk集成到springboot中时此接口没有返回兑现,经过调试发现了一个编码错误
方法为tunnelService.handle()
原代码
if (request.getMethod().toUpperCase() == "GET") {
handleGet(handler, options);
}
if (request.getMethod().toUpperCase() == "POST") {
handlePost(handler, options);
}
修改后代码
if (request.getMethod().toUpperCase().equals("GET")) {
handleGet(handler, options);
}
if (request.getMethod().toUpperCase().equals("POST")) {
handlePost(handler, options);
}
修改后此接口正常

关于信道服务器,https://ws.qcloud.com

建立连接的时候,业务服务器 请求 信道服务器 https://ws.qcloud.com/get/wsurl

疑问1:信道服务器返回的值 其实是 数组。
TunnelService.php 第101行 进行了json_decode 操作。

疑问2:信道服务器返回的值中没有 signature。

另外感觉 信道服务器 ws.qcloud.com 是不是近期有问题,即使我取消了signature 的验证,以及 注释了 相关json_decode的操作,但是聊天室的demo,运行中依旧有问题。

补充自动部署时每个镜像的环境说明

C#

补充 IIS 网站目录说明、代码升级发布说明。

Java

补充 Apache 和 Tomcat 版本和环境说明、代码部署目录说明、部署方法说明。

Node

补充代码部署目录说明、PM2 脚本使用说明、SDK 升级方法说明。

PHP

补充代码部署目录说明、运行环境说明以及 SDK 升级方法说明。

信道接收顺序错乱问题

按照我写的服务端代码逻辑,
首先tunnel.broadcast消息A,然后tunnel.broadcast消息B。
在客户端上正常应该先收到A,然后才收到B,但是有时候会先收到B,再收到A。
这种情况怎么处理?

分享一个信道服务器demo

我的服务器不在腾讯云,所以买了腾讯云的解决方案来做项目,但感觉有点浪费。
前几天腾讯的信道服务挂掉了,这才意识到,信道服务器还是掌握在自己手里最好,可控也放心
但信道服务器没有现成的代码,通过研究SDK,明白了信道服务器的请求发送机制,并且尝试做了一款demo
欢迎移步
https://github.com/xiaoyun94/weapp-java-tunnel-demo

emoji一直报错

用户微信昵称 如果含有emoji 则没有办法post到MySQL上(已经设置过各种utf8mb4)。。。每次报错都说
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD: Incorrect string value: '\xF0\x9F\x90\x9F' for column 'nickName' at row 1
求助

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.