workman + webRtc + js 实现一对一视频聊天

首先解释原理:视频聊天原理就是peer to peer .点对点传输音视频数据,但是发送同时要先进行连接,包括传输带宽等数据,连接成功之后才能搭建起data channel (数据通道) 进行双向通讯 。
有四种连接状态:1开启,表明已做好准备等待连接 2 连接 表示 p2p 已连接成功 3 关闭连接 断开连接准备进行新连接 4关闭 关闭连接并关闭通讯不再连接。
下面是workman +webrtc实现的demo.
https://github.com/walkor/workerman-webrtc 源码
步骤:1下载源码
2.进入根目录 执行 composer install 下载安装workman
3 php start.php start -d 开启运行脚本 (如果是windows 直接双击执行start_for_win.bat 即可)
4 进入index.html 搭建一个聊天室 随便输入房间号
5 进入房间(确保摄像头,麦克风已连接)否则会报设备无法访问的错误
6 打开另一个窗口 输入同房间号,就可以进行视频聊天了(注意此demo为一对一视频聊天 出现第三个人会报错)

此demo(适用于谷歌等浏览器,可能部分浏览器不适用)

在ThinkPHP6.0 + Workerman长连接中使用异步任务,可以参照以下的步骤: 1. 安装Workerman扩展和Workerman服务端库。 可以使用Composer安装Workerman扩展和Workerman服务端库,可以通过以下命令进行安装: ```bash composer require workerman/workerman composer require workerman/channel ``` 2. 创建一个Workerman服务端脚本,并在其中定义异步任务处理方法。 ```php // 引入Workerman和Channel库 use Workerman\Worker; use Workerman\Channel\Client; // 创建一个Workerman服务端 $worker = new Worker('websocket://0.0.0.0:2346'); // 创建一个Channel服务端 $channel = new Channel\Server('127.0.0.1', 2206); // 在Worker进程中创建异步任务处理方法 $worker->onWorkerStart = function($worker) use ($channel) { // 创建一个异步任务 $task = new \Workerman\AsyncTask(); // 设置异步任务的处理方法 $task->onMessage = function($task, $data) use ($channel) { // 处理业务逻辑 $result = doSomething($data); // 将处理结果发送到Channel中 $channel->push($data['channel'], $result); }; // 将异步任务注册到Worker进程中 $worker->addTask($task); }; ``` 3. 在控制器中将需要处理的数据发送到异步任务中。 ```php use think\facade\Db; use Workerman\Channel\Client; class Index { public function index() { // 创建一个Channel客户端 $channel_client = new Client('127.0.0.1', 2206); // 发送数据到异步任务中处理 $data = [ 'channel' => 'my_channel', // 定义Channel名称 'data' => [ 'user_id' => 1, 'content' => 'hello world', ], ]; $task_id = $channel_client->asend($data); // 获取异步任务的处理结果 $result = $channel_client->pop($task_id); return json($result); } } ``` 4. 在Workerman服务端中监听Channel,获取异步任务的处理结果。 ```php // 在Worker进程中监听Channel,获取异步任务的处理结果 $worker->onWorkerStart = function($worker) use ($channel) { // 创建一个异步任务 $task = new \Workerman\AsyncTask(); // 设置异步任务的处理方法 $task->onMessage = function($task, $data) use ($channel) { // 处理业务逻辑 $result = doSomething($data); // 将处理结果发送到Channel中 $channel->push($data['channel'], $result); }; // 将异步任务注册到Worker进程中 $worker->addTask($task); // 监听Channel,获取异步任务的处理结果 $channel->on('my_channel', function($data) use ($worker) { // 处理异步任务的处理结果 $worker->connections[$data['fd']]->send(json_encode($data['result'])); }); }; ``` 通过以上的步骤,我们就可以在ThinkPHP6.0 + Workerman长连接中使用异步任务来处理业务逻辑了。需要注意的是,异步任务的处理方法会在Worker进程中的异步任务进程中执行,所以需要将需要的资源例如MySQL连接等在onWorkerStart回调函数中创建。同时,需要使用Channel来进行异步任务的处理结果获取,避免阻塞主进程。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁静之峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值