问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

L-SlGNAL和R-SIGNAL

发布网友 发布时间:2022-04-27 05:54

我来回答

2个回答

懂视网 时间:2022-05-12 07:55

目录

对SignalR不了解的人可以直接移步下面的目录

SignalR系列目录

前言

- -,我又来了,今天废话不多说,我们直接来实现Web视频聊天.

采用的技术如下:

HTML5 WebRTC

SignalR2.2.0

localResizeIMG3(前端图像压缩技术,开源)

效果如图(马赛克你懂的,Demo效果比较简陋):

正文

首先我们来看看前端的实现,主要是通过HTML5的WebRTC技术获取视频流 转换成图片 然后采用压缩后定时发送的技术给到SignalR服务端.

我们先来看看获取视频流的JS,文字我就不多解释了,大家直接看注释即可


 
   canvas = document.getElementById("canvas"), 
  context = canvas.getContext("2d"), 
  video = document.getElementById("video"),
  videoObj = { "video": }, 
  errBack = "Video capture error: "
  
   (navigator.getUserMedia) { 
   navigator.getUserMedia(videoObj, = (navigator.webkitGetUserMedia) { 
   navigator.webkitGetUserMedia(videoObj, = data = (navigator.mozGetUserMedia) { 
   navigator.mozGetUserMedia(videoObj, =
  window.setInterval(0, 0, 320, 240 type = 'jpg' imgData =0.1, 
   done: data =
    500)

这样,我们就获取到了相关的数据(PS:获取到的图像大小约为4800个长度的字符串,压缩率0.1压缩后为2300个长度,自行根据带宽修改压缩率)

下面我们看看SignalR的实现代码(关键方法已经标黄):

 [HubName("getMessage")] public class TestHub : Hub
 { public void SendMessage(string aaaa)
 {
  Clients.All.broadcastMessage(aaaa);
 } public void SendImage(string imagedata)
 {  //获取图像数据,转发给其他客户端
  Clients.Others.showimage(new {id=Context.ConnectionId,data=imagedata});
 } public override System.Threading.Tasks.Task OnConnected()
 {
  Clients.Others.addKuang(Context.ConnectionId);  
  return base.OnConnected();
 } public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
 {
  Clients.All.romeKuang(Context.ConnectionId);  
  return base.OnDisconnected(stopCalled);
 }
 }

我们来看看前端的SignalR的实现代码:

  // 这里是注册集线器调用的方法,和1.0不同的是需要chat.client后注册,1.0则不需要
  var chat = $.connection.getMessage;
  chat.client.broadcastMessage = function (name) {   
  // HTML编码的显示名称和消息。
   var encodedMsg = $('<p />').text(name).html();   
   // 将消息添加到该页。
   $('#messsagebox').append('<li>' + encodedMsg + '</li>');
  };  
  //获取图片数据,并实时显示
  chat.client.showimage = function (data) {   
  if ($("#" + data.id).length<=0) {   
  var html = '<p style="float: left; border: double" id="p' + data.id + '">
    <img id="'+ data.id + '" width="320" height="240">
    <br />
    <span>用户'+ data.id + '</span>
    </p>'
   $("#contextp").append(html)
   }
   $("#" + data.id).attr("src", data.data);
  }  // 获取用户名称。
  $('#username').html(prompt('请输入您的名称:', ''));  
  // 设置初始焦点到消息输入框。
  $('#message').focus();  
  // 启动连接,这里和1.0也有区别
  $.connection.hub.start().done(function () {
   $('#send').click(function () {   
   var message = $('#username').html() + ":" + $('#message').val()   
   // 这里是调用服务器的方法,同样,首字母小写   
   chat.server.sendMessage(message);   // 清空输入框的文字并给焦点.
   $('#message').val('').focus();
   });
  });

这样,我们很简单的就完成了HTML5+SignalR2.0的视频聊天程序.

写在最后

由于这是一个简单的Demo,所以并没有考虑到应用于生产环境的问题,文章中实现的是视频群聊,所以对带宽要求很高(毕竟数据全部需要从服务器交换出去,基本测试为4人需要2M带宽,在压缩率0.1的情况下),如果你要应用于生产环境,还是需要进一步的优化,比如通信的间隔,最好是单人互相通信之类的各种情况...,就说到这里,Over..

热心网友 时间:2022-05-12 05:03

标签: WebSocket SignalR

前言
1. Web消息交互技术
1.1 常见技术
1.2 WebSocket介绍
1.3 WebSocket示例
2. Signal
2.1 SignalR是什么
2.2 默认传输方式
2.3 指定传输方式
2.4 自动管理传输方式
2.5 通信模型
2.6 SignalR示例(永久连接和Hubs(略))
(1)安装Nuget包
(2)增加SignalR服务
(3)增加Startup启动类
(3)前端js配置
(4)实际效果
(5).Net Client实现
3. 总结
4. 参考资料

前言
最近因为项目中涉及到了实时数据的传输,特地去了解了一下当前Web应用中常见的实时交互手段,当然一开始也不仅限于Web客户端。从c#自带的Socket类,到Html5中的WebSocket,再到Asp .Net利器SignalR,总算将这块知识点及应用入门了,当然今天的主要内容还是Web端的消息交互技术(Ajax,Comet,WebSocket等),这些技术难度有中有低,应用场所也有不同,最后我们要根据项目情况来选择恰当的技术。接下来便简单介绍一下

1. Web消息交互技术

1.1 常见技术
应用技术说明优缺点
轮询(polling)这应该是最常见的一种实现数据交互的方式,开发人员控制客户端以一定时间间隔中向服务器发送Ajax查询请求大,但是也因此,当服务器端内容并没有显著变化时,这种连接方式将带来很多无效的请求,造成服务器资源损耗。适合并发量小,实时性要求低的应用模型,更像是定时任务。优点:实现最为简单,配置简单,出错几率小

缺点:每次都是一次完整的http请求,易延迟,有效请求命中率少,并发较大时,服务器资源损耗大
长轮询(long polling)长轮询是对轮询的改进,客户端通过请求连接到服务器,并保持一段时间的连接状态,直到消息更新或超时才返回Response并中止连接,可以有效减少无效请求的次数。属于Comet实现优点:有效减少无效连接,实时性较高

缺点:客户端和服务器端保持连接造成资源浪费,服务器端信息更新频繁时,long polling并不比polling高效,并且当数据量很大时,会造成连续的polls不断产生,性能上反而更糟糕
iframe流iframe流方式是在页面中插入一个隐
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
YY聊天中哪些语音的会不会作为文件存下来 2023谷雨节气的含义 谷雨三候是什么 我老公欠债,外遇,我想离婚,怎么办 ...我提供了我的姓名,出生年月日,还有工作地点,会出什么事吗... 刚刚接到一个诈骗电话,问我要了我的姓名和出生年月日,会不会利用... 不小心接到骗子的电话,还告诉了我的姓名和出生年月日,要不要紧啊... 知道了姓名和出生年月日,能拿来作案吗? WOW安装要CD 是什么问题? 急急急、、、魔兽世界用盘安装时老要CD片 时怎么回事 取消以后就安装不... 每次下载魔兽世界安装中途都会断掉,要求插入什么CD,然后出现这么一段文... 求野比大雄的生化危机各种结局!! signalr 必须有jquery吗 求翻译哆啦A梦剧场版各集名称 signalr 可不可以wpf作为客户端 《机器猫》原著中的主角是写成‘康夫’还是‘大雄’? windows服务自托管 SignalR 1.x版本的服务器端 什么是MATLAB GUl 大雄,静番,胖虎,小夫与机器猫一起举行围棋比赛,每 如何设置SignalR Android Studio中忽略了delvelopement SSL问题 野比大雄生化危机无理改造版二所有结局和达成条件 signalr 定义成接口 供多个web跨域调用 matlab 中 如何实现将字符串变量的值作为新的变量名 并对该新的变量名赋值 &quot;机器猫&quot;中。大雄。有哪几个名字、、 如何使用signalr实现离线聊天 matlab一个存储x,y坐标的两列矩阵,怎么对矩阵先按照x坐标排序,然后对x相同的按照y坐标排序。 跪求野比大雄的生化危机实验室电脑密码和暗号 signalr 支持.net 4.0吗 matlab中,一列数除特定坐标的点,其余点全部置零。应如何操作? 错错错 五月天 MATLAB的所有函数? java中有没有类似 signalr的功能 求各位达人给我说下各种版本的野比大雄的生化危机各种结局是怎么样的?是各种版本的各种结局哦! .net 5.0 signalr支持xp吗 求哆啦A梦2009:再见,哆啦A梦中的背景音乐。大雄跟爸爸在夕阳下说话以及大雄跟胖虎打架时候抱住他腿的2处 野比大雄的生化危机为什么z键无法攻击啊? 个人没有抵押品,但是有工作,可以贷款吗? 野比大雄的生化危机-原版(EasyType)要下载什么? 才可以玩? 大雄机械CAD如何转图 哆啦A梦周围有些什么人 分别叫什么名字? 哆啦a梦 关于大雄与静香的爱情故事的有那集 又目录名字 要那种10分钟 以上的 不要10分钟以下的 《江南百景图》城市解锁顺序是什么? 应天府城郊宝箱在哪? 应天府城郊宝箱在哪 江南百景图升级应天府有什么用 江南百景图苏州府如何解锁 江南百景图七个城市如何开启 游戏江南百景图怎么样才能让人一进去就能看见你的应天府不是苏州府? 江南百景图应天府哪里可以种笋 江南百景图铁锤怎么获得 急:QQ空间怎么添加空间好友,还有别人请求怎么接受 啊??