打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【ASP.net MVC SignalR】使用SignalR实作广播、群组特定对象传送 | IT@找着了
【ASP.net MVC SignalR】使用SignalR实作广播、群组特定对象传送

在做同步网页的时候,我们通常都是以广播的形式去更新,毕竟我们希望让所有用户都可以取得最新的信息;但有时候我们可能会遇到其他特殊的需求,部分的群组更新信息或是某一个特定的人更新信息(EX:档案上传的Process bar、两人之间的游戏对战…),这时候就会用到群组的特性,或是特定对象的传送。

 

广播

所有客户端都可以接收到此讯息,下段C#的程序代码,是由JavaScript呼叫C#传送讯息的Function

Clients 这个类别,可以选择要更新的目标客户群,去呼叫他们的JavaScript来更新页面上的信息

Clients选择All的属性,表示我们选择了所有的使用者,而接在后面的addMessage是在Client端的JavaScript的Function

 

广播的程序代码在网络上很容易搜寻到,所以这边不再赘述

 

$(function () {    var chat = $.connection.chat;    chat.client.addMessage = function (message) {        $('#msgbox').append("<li>" + message + "</li>");    };    $("#sendmsg").click(function () {        chat.server.send($("#message").val());    });    $.connection.hub.start()//{transport:"longPolling"}webSockets、longPolling、serverSentEvents、foreverFrame    .done(function () {            chat.server.hello();        })	.fail(function () {	    alert("Error connecting to realtime service");	});});

 

 

//C#public void Send(String Message){    Clients.All.addMessage(Message);}

 

群组

要把讯息传送到群组中,要事先向Hub注册使用者群组,之后传送给该群组的信息,才能够顺利地接收

所以在C#的程序代码中,有个Group的Function,GroupId是要传入使用者要加入的群组的名称或是代号;传送讯息时,也需要传入这个名称或代号才会对这个群组执行"广播",能接收到讯息的也只有这群组的用户而已!

所以在传送讯息的Function,多了一个群组号码的参数!Clients.Group的这个方法,会呼叫这群组的Clinet端的JavaScript去新增讯息

 

public void Group(String GroupId){    Groups.Add(Context.ConnectionId, GroupId);    Clients.Group(GroupId).addMessage("Welcome");}public void Send(String GroupId, String Message){    Clients.Group(GroupId).addMessage(Message);}

 

 

$(function () {    var chat = $.connection.chat;    chat.client.addMessage = function (message) {        $('#msgbox').append("<li>" + message + "</li>");    };    $("#sendmsg").click(function () {        chat.server.send("A", $("#message").val());    });    $.connection.hub.start().done(function () {//webSockets、longPolling、serverSentEvents、foreverFrame        chat.server.group("GroupA");        chat.server.send("da37e11c-987b-4ff5-bf7f-97c8155b469c", "hello"); // Notify other clients    })	.fail(function () {	    alert("Error connecting to realtime service");	});});

特定对象

最后要传讯息给一个特定的用户,我们使用的是Client的函数,这个函数需要传入一个使用者个connectionid,而这组代号是一个类似GUID的编码;传送讯息给该用户需要输入他的代码,才会将讯息传送改该用户,之后只有这个用户能看到这个信息

 

public void SendOne(String ClientId, String Message){    Clients.Client(ClientId).addMessage(Message);}

 

$(function () {    var chat = $.connection.chat;    chat.client.addMessage = function (message) {        $('#msgbox').append("<li>" + message + "</li>");    };    $("#sendmsg").click(function () {        chat.server.send("A", $("#message").val());    });    $.connection.hub.start().done(function () {//webSockets、longPolling、serverSentEvents、foreverFrame        chat.server.sendOne("da37e11c-987b-4ff5-bf7f-97c8155b469c", "hello"); // Notify other clients    })	.fail(function () {	    alert("Error connecting to realtime service");	});});

 

后记

在写作SignalR的时候,一直在前端会有呼叫Javascript失败的时候,后来看见”<script src="/Signalr/hubs"></script>”的程序代码后,才发现原来我们在Server端的Function名称与在前端JavaScript的竟然不一样!!主要原因在于Javascript的Function名称,开头的字会是小写,而第二个字之后看C#的名字处理(若是大写,JavaScript的名称也就会是大写的),所以在这边建议大家在写SignalR的时候,可以把开头的单字都设定为小写,第二个在按照统一的命名方式处理!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SignalR中Hub快速入门
MVC5使用Signal进行双向通信(1)
WhatsApp 16个超实用的功能
WOW假成就宏教学贴 蛋刀、橙弓成就不再是梦
滚动条位置默认保持在底部(聊天框)
【楽天市場】△0の付く日に新作更新♪△作品♪リネンクロシェハット383chat-夏季太阳帽-可仿款
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服