Asp.Net Core + SignalR 实现实时通信

一、搭建项目

1、创建一个ASP.NET Core MVC 项目

4624570-943d76621cac2e08.png
image

2、nuget 下载和安装 MicroSoft.AspNetCore.SignalR

4624570-5530b18a303bf8ff.png
image

vs提示版本冲突

4624570-b7a8cbc87bc33c8d.png
image

这时我们选择低版本即可

4624570-5d4fb82349d6ca43.png
image
4624570-e021c9448ddeae46.png
image

二、SignalR配置

1、在model中创建一个类MyHub 代码如下

4624570-c5d0c98492470c64.gif
image

<pre class="prettyprint linenums prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px 0px; font: 12px/20px "courier new"; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/img/codecolorer_bg.gif") center top rgb(251, 251, 251); padding: 10px 35px; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset;">

  1. public class MyHub:Hub
  2. {
  3. public async Task SendMessage(string user, string message)
  4. {
  5. await Clients.All.SendAsync("ReceiveMessage", user+"["+DateTime.Now.ToLongTimeString()+"]", message);
  6. }
  7. public async Task SendMessageToUser(string user, string message)
  8. {
  9. await Clients.Client(Context.ConnectionId).SendAsync("ReceiveMessage", user + ":" + DateTime.Now.ToLongTimeString()+"]", message);
  10. }
  11. }

</pre>

View Code

2、在Startup中注入SignalR并在Configure中配置路由

4624570-edad7f6d806da108.png
image
4624570-2610ce34ef2846ef.png
image

3、右键项目名=>添加=>添加客户端库

4624570-f9be1b871706d809.png
image
  • 对于“提供程序”选择unpkg。

  • 对于“库”输入 @aspnet/signalr@1.0.4 (@1.0.4 是根据 nuget SignalR的本本定的)。

  • 选择“选择特定文件”,展开“dist/browser”文件夹,然后选择“signalr.js”和“signalr.min.js”。

  • 将“目标位置”设置为 wwwroot/lib/signalr/,然后选择“安装”。

4624570-f123422dc02f3680.png
image
4624570-865b170f942057ad.png
image

配置完毕。

三、编码实现

1、修改Views/Home中的Index.cshtml如下

4624570-3b436c475e384542.gif
image

<pre class="prettyprint linenums prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px 0px; font: 12px/20px "courier new"; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/img/codecolorer_bg.gif") center top rgb(251, 251, 251); padding: 10px 35px; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset;">

  1. <div class="container">
  2. <div class="row"> </div>
  3. <div class="row">
  4. <div class="col-6"> </div>
  5. <div class="col-6">
  6. User..........<input type="text" id="userInput" />
  7. <br />
  8. Message...<input type="text" id="messageInput" />
  9. <input type="button" id="sendButton" value="Send Message" />
  10. </div>
  11. </div>
  12. <div class="row">
  13. <div class="col-12">
  14. <hr />
  15. </div>
  16. </div>
  17. <div class="row">
  18. <div class="col-6"> </div>
  19. <div class="col-6">
  20. <ul id="messagesList"></ul>
  21. </div>
  22. </div>
  23. </div>
  24. <script src="~/lib/signalr/dist/browser/signalr.js"></script>
  25. <script src="~/js/chat.js"></script>

</pre>

View Code

2、在js文件见创建一个js文件 chat.js

4624570-75047f6fc9480ed7.gif
image

<pre class="prettyprint linenums prettyprinted" style="border-width: 1px 1px 1px 4px; border-style: solid; border-color: rgb(221, 221, 221); border-image: initial; margin: 15px 0px; font: 12px/20px "courier new"; white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word; background: url("/img/codecolorer_bg.gif") center top rgb(251, 251, 251); padding: 10px 35px; box-shadow: rgb(238, 238, 238) 40px 0px 0px inset, rgb(51, 183, 150) 42px 0px 0px inset;">

  1. var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();

  2. connection.on("ReceiveMessage", function (user, message) {

  3. var msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");

  4. var encodedMsg = user + " says " + msg;

  5. var li = document.createElement("li");

  6. li.textContent = encodedMsg;

  7. document.getElementById("messagesList").appendChild(li);

  8. });

  9. connection.start().catch(function (err) {

  10. return console.error(err.toString());

  11. });

  12. document.getElementById("sendButton").addEventListener("click", function (event) {

  13. var user = document.getElementById("userInput").value;

  14. var message = document.getElementById("messageInput").value;

  15. connection.invoke("SendMessage", user, message).catch(function (err) {

  16. return console.error(err.toString());

  17. });

  18. event.preventDefault();

  19. });

</pre>

View Code

3、Ctrl+F5 运行出两个网页

4624570-d228c1e13b485513.png
image
4624570-7ad1442474a63a1f.gif
好书推荐、视频分享,与您一起进步
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值