MVC5使用SignalR进行双向通信

Posted owenzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MVC5使用SignalR进行双向通信相关的知识,希望对你有一定的参考价值。

@a604572782 2015-08-10 09:01 字数 2133 阅读 1245

MVC5使用SignalR进行双向通信 (1)


配置SignalR

  1. 在NuGet中通过 install-package Microsoft.AspNet.SignalR 命令进行安装
  2. 在Scripts文件夹中会添加 jquery.signalR-2.2.0.js 和 jquery.signalR-2.2.0.min.js
  3. 在startup的configuration方法中加入app.MapSignalR();
    app.MapSignalR()是把Signal Hub 映射到 /signal
  1. using Owin;
  2. using Microsoft.Owin;
  3. [assembly: OwinStartup(typeof(SignalRChat.Startup))]
  4. namespace SignalRChat
  5. public class Startup
  6. public void Configuration(IAppBuilder app)
  7. // Any connection or hub wire up and configuration should go here
  8. app.MapSignalR();

后台代码

  1. 在Model文件夹中新建一个ChatHub继承自Hub,写一个send方法,用户接受客户端的请求
  1. public class ChatHub:Hub
  2. /// <summary>
  3. /// 发送信息给所有用户
  4. /// </summary>
  5. /// <param name="message"></param>
  6. public void SendAll(string name,string message)
  7. //发送给所有客户端
  8. Clients.All.sendAll(name,message);

前台代码

  1. 新建一个视图名为Chat.cshtml
  2. 加入如下代码
  1. @
  2. ViewBag.Title = "Chat";
  3. <h2>Chat</h2>
  4. <div class="container">
  5. <input type="text" id="message" />
  6. <input type="button" id="sendmessage" value="Send" />
  7. <input type="hidden" id="displayname" />
  8. <ul id="discussion">
  9. </ul>
  10. </div>
  11. //在Layout.cshtml 中定义了名为 scripts 的section
  12. @section scripts
  13. <!--Script 引用. -->
  14. <!--jquery _Layout.cshtml 中已经被引用. -->
  15. <!--引用 SignalR. -->
  16. <script src="~/Scripts/jquery.signalR-2.1.0.min.js"></script>
  17. <!--该script会自动生成,添加到引用中 -->
  18. <script src="~/signalr/hubs"></script>
  19. <!--SignalR 关键js语句块.-->
  20. <script>
  21. $(function ()
  22. // 引用hub委托
  23. var chat = $.connection.chatHub;
  24. // 添加一个方法供hub回调
  25. chat.client.sendAll = function (name,message)
  26. // 处理返回的数据到页面
  27. $(‘#discussion‘).append(‘<li><strong>‘ + htmlEncode(name) + ‘</strong>: ‘+ message +‘</li>‘);
  28. ;
  29. // 弹出一个框存储姓名
  30. $(‘#displayname‘).val(prompt(‘输入你的名字:‘, ‘‘));
  31. $(‘#message‘).focus();
  32. // 打开连接
  33. $.connection.hub.start().done(function ()
  34. $(‘#sendmessage‘).click(function ()
  35. // 按钮点击时发送给服务器信息,服务器进行转发.
  36. chat.server.send($(‘#displayname‘).val(), $(‘#message‘).val());
  37. // 清楚输入框并添加焦点
  38. $(‘#message‘).val(‘‘).focus();
  39. );
  40. );
  41. );
  42. // 编码化
  43. function htmlEncode(value)
  44. var encodedValue = $(‘<div />‘).text(value).html();
  45. return encodedValue;
  46. </script>

对Signal 工作原理进行下分析:
1. 页面加载是弹出一个框输入姓名
2. 在页面加载的时候,先创建一个hub引用var chat = $.connection.chatHub
3. 通过 $.connection.hub.start()初始化连接
初始化连接后通过$.connection.hub.start().done()调用回调函数。
在这个回调函数中绑定了个点击事件当按钮点击时向ChatHub中的send方法发出请求,后台则会通过Clients.All.sendAll(name,message)向所有在线客户端发送信息客户端会调用在js中定义的sendAll方法,通过在sendAll方法进行数据处理实时的显示

SignalR MVC

以上是关于MVC5使用SignalR进行双向通信的主要内容,如果未能解决你的问题,请参考以下文章

《ASP.NET SignalR系列》第一课 认识SignalR

Signalr 实现心跳包

.NETCOREASP.NET Core SignalR

关于SignalR 进行双向多步对话

SignalR系列教程:在MVC在使用SignalR

将 Signal R 合并到现有的 Web 应用程序中