WebRTC 可组合
- 清楚扼要地说明问题
这个建议建议在VueUse库中添加一个可容的WebRTC来简化Vue 3应用程序中实时对等通信的集成. WebRTC API通常用于在浏览器之间建立介质和数据通道,但其复杂性往往需要锅炉板代码来处理连接,流,和事件. Vue可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可容可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相可相
建议的解决办法
以下代码定义了可共通性,该可共通性在连接的同级之间建立一个对等的WebRTC数据通道. 添加新对等器需要连接到 WebSocket 信号服务器.
使用WebRTC.ts
导入{ 频道新闻, 频道打开, (原始内容存档于2019-09-21) (英语). RTC Answer, (原始内容存档于2018-03-26) (英语). RTC Candidate, RTCAVER, , (法语) 同行 类型 断开从信号, 类型 : 类型为新Peer, 出自“@/types/webRTC”; 从 “@/types/ common” 导入{信件 Is, messageType, type Message, type PeerId} ;
导出 enum WebSocket status { 打开="打开", 连接="连接", 关闭 = "关闭", {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
导出接口使用WebRTC选项{ RTC配置:RTC配置; 频道打开 :( 事件 : { 细节: 频道打开 } ) @% 无效 ; (活动:({详细:ChannelMessage}) 无效; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
cont 配置 = 使用 Runtime Config ();
导出函数使用WebRTC( 选项: 使用WebRTC 选项) { 网页Socket status = ref (WebSocketStatus.ClosED); 互联网档案馆的存檔,存档日期2011-12-02. cont 等同位素 = 反应性<地图>字符串, Peer%%% (新地图( ) ); 用户=用户Store(); const url = (peerId: peerId) {{ (中文(简体) ). 返回( ưμ㼯A (地处.protocol QQ"https:"?"?"wss://":"ws://")+. 位置。主机+ 配置.app.baseURL + “api/ signaling?userId=” + 鼠标 (三)
- ; const webSocket = ref(新WebSocket(url (useUser.id))); ; 互联网档案馆的存檔,存档日期2013-12-21.
WebSocket Status.valu = WebSocket Status.CONNECINGING ; 互联网档案馆的存檔,存档日期2013-12-22.
webSocket.value.onopen = () {{ { webSocket Status.value = WebSocket Status.OPEN; 互联网档案馆的存檔,存档日期2013-12-02.
- ;
webSocket.value.onclose = () {{ webSocket Status.value = WebSocket Status.ClosEd; 页面存档备份,存于互联网档案馆.
- ;
Const 创建 PeerConnection = (peerId: 字符串) {{ 如果( peerId QQ 使用用户. id) 返回; 如果 (peers.get(peerId) !===================================================================================================================== (=============================================== pate.get(peerId)!.is已连接 符号=真实; 返回; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? cont connection = 新的RTCPeer Connection(options.RTCC Config); 2. connection.onconnection states change = () {{{{{{{{{} cont 等同点=等同点.get(等同点); 如果( 同类) { oper.connect status = connect.connect state ; 2. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
- ; connection.onicandide=(活动) {{ 如果( event. candidate) { cont 候选 = 新的 RTC Candidate(event.candidate, user.id, operId); webSocket.value.send(JSON.stringify(candidate)); ; 互联网档案馆的存檔,存档日期2013-12-21. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
- ; 连接.ondatachannel=(活动) {{ 康斯特频道=事件. 频道; channel.onmessage = (活动) {{{ const 频道Message = 新建频道Message(peerId, event.data); 选项.onChannelMessage({详情:频道Message});
- ; 频道.onopen= () {{{{{} 控制台.log (`打开有身份证的接收频道: . . . . . . .
内容来源: vueuse/vueuse