1.在tp5中安装workerman
1-安装workerman
首先通过 composer 安装
composer require topthink/think-worker
如果报错:
Installation failed, reverting ./composer.json to its original cont
则使用
composer require topthink/think-worker=1.0.*
如果需要在window下做服务端,还需要
composer require workerman/workerman-for-win
2.配置运行环境
在tp5根目录新建server.php(名称随意)
添加内容如下:
#!/usr/bin/env php
<?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE', 'push/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php
application文件夹下新建push文件夹
push文件夹下新建controller文件夹
controller文件夹下新建Worker.php内容如下:
<?php
namespace app\push\controller;
use think\worker\Server;
class Worker extends Server {
protected $socket = 'websocket://127.0.0.1:(安全组内的端口)';//安全组内的端口指的是服务器安全策略开放的通信端口,使用此端口可以通信,安全组外的端口会导致通信失败。
/**
* 收到信息
* @param $connection
* @param $data
*/
public function onMessage($connection, $data) {
$connection->send('我收到你的信息了,服务器上的信息123');
}
/**
* 当连接建立时触发的回调函数
* @param $connection
*/
public function onConnect($connection) {
}
/**
* 当连接断开时触发的回调函数
* @param $connection
*/
public function onClose($connection) {
}
/**
* 当客户端的连接上发生错误时触发
* @param $connection
* @param $code
* @param $msg
*/
public function onError($connection, $code, $msg) {
echo "error $code $msg\n";
}
/**
* 每个进程启动
* @param $worker
*/
public function onWorkerStart($worker) {
}
}
在根目录运行cmd 输入php server.php(与上面新建的根目录文件一样的名字) start
3.配置wss与小程序通信
已经申请了ssl证书,并且配置ssl安全协议 ,利用apache转发443端口至指定端口(你在work.php写的安全组内的端口)
apache配置文件httpd-ssl.conf文件修改:
VirtualHost内添加
SSLProxyEngine on
ProxyRequests Off
ProxyPass /wss ws://127.0.0.1:监听端口号(此端口号必须在服务器安全组内)
ProxyPassReverse /wss ws://127.0.0.1:监听端口号(此端口号必须在服务器安全组内)
在文件内添加(搜索有的替换)
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM
SSLHonorCipherOrder on
打开httpd.conf中的相应模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
注意,小程序端:
// pages/worktest/worktest.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
wx.connectSocket({
url: 'wss://你的服务器地址/wss',//wss就是刚才在httpd-ssl.conf配置好的访问路径
});
wx.onSocketOpen(function(res) {
console.log("连接成功");
wx.sendSocketMessage(this.data);
console.log("给服务端发送一个字符串:tom");
});
wx.onSocketMessage(function(res) {
console.log("收到服务端的消息:" + res.data);
});
// wx.sendSocketMessage({
// // data: msg
// })
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function() {
}
})
2019年3月20日10:51:11 宋汲晨