您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
workerman也能玩二進制流workerman推送圖片音視頻實例
发布时间:2022-01-15 23:51:32编辑:雪饮阅读()
workerman最常見應用就是websocket,一般都是utf8數據,而如果要發送二進制數據像是文件流,則需要單獨設置連接的數據類型,并且就在下測試貌似utf8數據和二進制數據不能混寫在一起,不僅workerman這樣,之前幫同事處理問題時候發現原生php貌似也是這樣。
use Workerman\Protocols\Websocket;
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
ini_set('memory_limit','1024M');
$ws = new Worker('websocket://0.0.0.0:8181');
$ws->onConnect = function($connection)
{
$connection->onMessage=function($connection,$data){
$arr=json_decode($data,true);
if($arr["type"]=="getImg"){
$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER;
$img=file_get_contents("1.png");
$connection->send($img);
}
if($arr["type"]=="getVideo"){
$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER;
$mp4=file_get_contents("pal7xuan1.mp4");
$connection->send($mp4);
}
if($arr["type"]=="getAudio"){
$connection->websocketType = Websocket::BINARY_TYPE_ARRAYBUFFER;
$mp4=file_get_contents("cl.mp3");
$connection->send($mp4);
}
};
};
Worker::runAll();
然後訪問效果在火狐中的效果如
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://www.w3school.com.cn/jquery/jquery-1.11.1.min.js"></script>
<script>
function onClose(evt){
console.log("onClose",evt);
}
function onError(evt){
console.log("onError",evt);
}
function wsCreate(type){
console.log("wsCreate type",type);
var ws=new WebSocket("ws://192.168.43.170:8181");
ws.onopen=function(evt){
var message={
type:type
}
ws.send(JSON.stringify(message));
};
if(type=="getImg"){
ws.onmessage=function(evt){
console.log("onMessage",evt);
let reader = new FileReader();
reader.readAsDataURL(evt.data);
reader.onload=function(){
$("img").attr("src",reader.result);
$("img").show();
};
};
}
if(type=="getVideo"){
ws.onmessage=function(evt){
console.log("onMessage",evt);
let reader = new FileReader();
reader.readAsDataURL(evt.data);
reader.onload=function(){
$("video source").attr("src",reader.result);
$("video").show();
};
};
}
if(type=="getAudio"){
ws.onmessage=function(evt){
console.log("onMessage",evt);
let reader = new FileReader();
reader.readAsDataURL(evt.data);
reader.onload=function(){
$("audio").attr("src",reader.result);
$("audio").show();
};
};
}
ws.onclose=onClose;
ws.onerror=onError;
}
wsCreate("getImg");
wsCreate("getVideo");
wsCreate("getAudio");
</script>
</head>
<body>
<img style="display: none;width:100px;"/>
<video style="display: none;width:200px;" controls autoplay>
<source src="" type="video/mp4">
</video>
<audio style="display: none;" src="" controls="controls"></audio>
</body>
</html>
关键字词:workerman,二進制,流,推送,圖片,音,視,頻,實例
相关文章
- workerman-websocket协议-websocket协议握手(get,serv
- workerman系列之windows環境下多实例多協議共存
- workerman系列之再談socket5代理s5優化
- workerman服務治理優化系列之連接數管理-根据连接数重
- workerman服務治理系列之workerman服务(脚本)自启动(开机
- workerman16进制与2进制字符串的转换(局限有点狭隘,應該
- http反向代理環境下获取真实ip(基於workerman)
- https在反向代理環境下获取真实ip(基於workerman實現)
- 基於workerman實現ws获取真實客戶端ip(反向代理環境下)
- workerman系列之nginx配置反向代理于workerman時候實