准备
- wss的形式,微信小程序后台如果你配置的时候不加端口,默认是443端口,类似于我们的https,而ws就类似于http
- Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR 当你遇到这个错误就说明你的ssl配置有问题
- 微信小程序要求使用wss和https,所以你想正式环境可以使用,就必须使用这两种方式,很多网上资料我看都是ws的形式,那是因为微信那个开发工具可以设置成不进行证书的判断.
- 下面的swoole部分不会很详细你必须有一定websocket的基础
服务端
- 小程序后台进行websocket的配置
我配置了两个地址是 easy.xxxx 和 easy.xxx:9503 ,其中9503是我之后要用的端口,easy.xxx是你的域名,不知道不加行不行,微信有修改次数限制我就不进行测试了 - swoole部分代码
//和普通的websocket不同的是加了SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL
$serv = new swoole_websocket_server(IP,端口,SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL) ) ;
//存放你证书的地址
$setArray['ssl_cert_file'] = $this->ssl_cert_file;
$setArray['ssl_key_file'] = $this->ssl_key_file;
//设置配置参数
$serv ->set($setArray);
客户端
我不会小程序,所以给的是js的,是完整可以用的,只要你改下WebSocket地址就行,同时我服务端的方法小程序的同事测试过,是可以调通使用的
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta charset="utf-8">
<title>socket</title>
<script type="text/javascript">
if("WebSocket" in window) {
//修改你要发的地址
var ws = new WebSocket("wss://easy.xxx:9503");
//socket握手自动触发推送消息
ws.onopen = function() {
var data = {
status:2,
type: 4
}
data = JSON.stringify(data);
console.log('连接服务端信息');
console.log(data);
ws.send(data);
};
//监听来自服务端的消息
ws.onmessage = function(evt) {
console.log('收到服务端信息');
console.log(evt.data);
//001.接收来自socket的信息
/* var data=JSON.parse(evt.data); */
/* console.log('收到服务端信息');
console.log(data);
//003.收到后先回复server已经收到.因为socket是挂起的
var senddata={
shoppingId:data.shoppingId,
status:3
}
senddata = JSON.stringify(senddata); */
//ws.send(senddata);
};
//客户端或服务端断开自动触发
ws.onclose = function() {
console.log('websocket已经断开!');
};
} else {
console.log('您的浏览器不支持h5,无法启动websocket');
}
</script>
</head>
<body></body>
</html>