之前因为项目需要,想把workerman整合进tp5框架里,网上找了很久都没有想要的资料,只能自己摸索,最后发现其实方法很简单,tp5已经帮准备好了。
现在把方法写成博客,当做记录。
一、你需要准备什么?
1.thinkPHP5.0以上版本(完整版,也就是文件名包含有full字样的)
2.配置好php的环境变量
3.把tp5框架中的文件夹vendor->workerman->workerman复制出来,稍后会用到。
二、配置thinkPHP,写代码
这个是目录图
1.index模块下index.php文件的代码
<?php
namespace app\index\controller;
class Index
{
/**
* 作用,显示模板文件
*/
public function index()
{
return view('',[]);
}
}
2.index模块下模板文件index.html的代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
// 假设服务端ip为127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2346");
ws.onopen = function() {
console.log("连接成功");
ws.send('tom');
console.log("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
console.log("收到服务端的消息:" + e.data);
};
</script>
</head>
<body>
</body>
</html>
3.socket模块下index.php的代码
<?php
namespace app\socket\controller;
use Workerman\Worker;
class Index
{
public function index()
{
// 创建一个Worker监听2346端口,使用websocket协议通讯
$ws_worker = new Worker("websocket://0.0.0.0:2346");
// 启动4个进程对外提供服务
$ws_worker->count = 4;
// 当收到客户端发来的数据后返回hello $data给客户端
$ws_worker->onMessage = function($connection, $data)
{
// 向客户端发送hello $data
$connection->send('hello ' . $data);
};
// 运行worker
Worker::runAll();
}
}
4.public文件夹下socket.php文件的代码
<?php
// 启动socket,通过cmd启动
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
//绑定到socket所在模块
define('BIND_MODULE','socket/index/index');
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';
三、启动websocket,进行测试
如果出现这个错误,请将前面拷出来的workerman文件夹替换进去(注意,是替换!)
替换以后重新运行,成功。
结论:可以看到,测试成功,而且是可以正常的在workerman里使用tp5。