如何用webrtc实现一个p2p文件发送的代码?
网友回复

发送文件我们先实现p2p发送消息,我们用php swoole搭建一个信令服务器
<?php
$userlist = [];
$server = new Swoole\Websocket\Server("0.0.0.0", 9502, SWOOLE_BASE, SWOOLE_SOCK_TCP | SWOOLE_SSL);
$server->set([
'ssl_cert_file' => '/data/cert/6284283_web.debug.only.bfw.wiki.pem',
'ssl_key_file' => '/data/cert/6284283_web.debug.only.bfw.wiki.key',
]);
$server->on('open', function($server, $req) {
$_get = $req->get;
$_username = $_get['username'];
global $userlist;
$userlist[$_username] = $req->fd;
echo "connection open: {$req->fd}{$_username}\n";
});
$server->on('message', function($server, $frame) {
$data = json_decode($frame->data, true);
//消息类型
$type = $data["type"];
$_ret = ["type" => $type];
//to user
$toUser = $data["toUser"];
$fromUser = $data["fromUser"];
$msg = isset($data["msg"])?$data["msg"]:"";
//msg
$sdp = isset($data["sdp"])?$data["sdp"]:"";
//sdp
$iceCandidate = isset($data["iceCandidate"])?$data["iceCandidate"]:"";
//ice
//对方挂断
if ("hangup" == $type) {
$_ret['fromUser'] = $fromUser;
$_ret['msg'] = "对方挂断";
}
//视频通话请求
if ("call_start" == $type) {
$_ret['fromUser'] = $fromUser;
$_ret['msg'] = "1";
}
//视频通话请求回应
if ("call_back" == $type) {
$_ret['fromUser'] = $fromUser;
$_ret['msg'] = $msg;
}
//offer
if ("offer" == $type) {
$_ret['fromUser'] = $toUser;
$_ret['sdp'] = $sdp;
}
//answer
if ("answer" == $type) {
$_ret['fromUser'] = $toUser;
$_ret['sdp'] = $sdp;
}
//ice
if ("_ice" == $type) {
$_ret['fromUser'] = $toUser;
$_ret['iceCandidate'] = $iceCandidate;
}
if ($toUser != "") {
global $userlist;
if (!isset($userlist[$toUser])) {
$_ret['msg'] = "Sorry,呼叫的用户不在线!";
$_ret['type'] = "call_back";
$_ret['fromUser'] = "系统消息";
$_senddata = json_encode($_ret);
$server->push($frame->fd, $_senddata);
} else {
foreach ($userlist as $key => $val) {
if ($key == $toUser) {
$_senddata = json_encode($_ret);
echo "send message: {$_senddata}\n";
$server->push($val, $_senddata);
}
}
}
}
// echo "received message: {$frame->data}\n";
});
$server->on('close', function($server, $fd) {
echo "connection close: {$fd}\n";
});
$server->start();在使用html实现点击查看全文
ai能写出比黑客还厉害的零日漏洞等攻击工具攻击任意软件系统工程?
js如何获取浏览器的音频上下文指纹、Canvas指纹、WebGL渲染特征?
为啥ai开始抛弃markdown文本,重新偏好html文本了?
网站有没有办法鉴别访问请求是由ai操控chrome-devtools-mcp发出的?
有没有python自动操作浏览器让网站无法鉴别是机器行为?
为啥最新由Meta / 斯坦福 / 哈佛出的ProgramBench基准GPT-5.4、Claude Opus 4.7、Gemini 3.1 Pro 等全部 0% 通过率?
有没有免费的api查询域名是否完成icp工信部备案?
codex用HyperFrames与 Remotion自动做视频那个更好?
claude code中Skill MCP CLI SubAgent Hooks Plugin区别?
浏览器webrtc点对点通讯如何才能走系统代理?


