1、下载安装tp5
这一步就不详细说了,比较简单,直接看TP文档吧
2、通过composer,为tp5集成workermantp
官方真不错,提供了workerman的集成方法,通过composer一键安装,详细内容见tp官方的github
3、写应用,先让workerman在tp中跑起来(直接应用tp官方内容)
首先创建控制器类并继承 think\worker\Server,然后设置属性和添加回调方法
namespace app\index\controller;
use think\worker\Server;
class Worker extends Server
{
protected $socket = 'ws://0.0.0.0:2346';
public function onMessage($connection,$data)
{
//这里写具体的逻辑
$connection->send($data);
}
}
支持workerman(具体用法请看workerman文档)所有的回调方法定义(回调方法必须是public类型)
在应用根目录增加入口文件 server.php
#!/usr/bin/env php
< ?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','index/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';
<!--?php
define('APP_PATH', __DIR__ . '/application/');
define('BIND_MODULE','index/Worker');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';
在命令行启动服务
php server.php start
linux下面可以支持下面指令
php server.php start|stop|status|restart|reload
打开chrome浏览器,按F12打开调试控制台,在Console一栏输入(或者把下面代码放入到html页面用js运行)
// 假设服务端ip为127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2346");
ws.onopen = function() {
alert("连接成功");
ws.send('tom');
alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
};
可以看到返回说明搭建成功
4、重点来了,就是让ws变成wss,这也是最头疼的问题,需要使用nginx代理
首先,需要为你需要访问的域名申请SSL,这里是通过Nginx的反向代理实现功能,具体配置如下:
upstream websocket {
# 填写workerman中websocket监听的端口
server 127.0.0.1:2346;
}
server {
# 填写外部wss连接端口,不冲突即可
listen 8282;
ssl on;
server_name test.painchina.com;
ssl_certificate key/key.csr;
ssl_certificate_key key/key.key;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
(1)把test.painchina.com换成你自己的访问域名
(2)把key.csr和key.key修改为你自己的SSL证书内容
5、搭建成功,访问试试
根据上面这个配置,访问地址为wss://test.painchina.com:8282
注意:微信小程序的sock链接不能带端口的,默认端口是443,带端口连接会出现开发工具、预览版正常,体验版和正式版错误