比较全的signalR例子

最全的参考:http://www.asp.net/signalr/overview/getting-started

关于如果安装SignalR: NuGet命令:

PM> Install-Package Microsoft.AspNet.SignalR

<------------1:与他人聊天:<------------

后台代码示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace SignalRChat.Hubs.Data
{
	[HubName("ViewDataHub")]
	public class ViewDataHub : Hub
	{
		//this is just called by client and return the value for it .
		public string Hello()
		{
			return "hello";
		}
		//this fucntion will be called by client and the inside function 
		//Clients.Others.talk(message);
		//will be called by clinet javascript function .
		public void SendMessag(string message)
		{
			Clients.Others.talk(message);
		}
	}
}

小提示:注意其它的红色字体部分

前台代码示例:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title></title>
	<!--Script references. -->
	<!--Reference the jQuery library. -->
	<script src="Scripts/jquery-1.10.2.min.js"></script>
	<!--Reference the SignalR library. -->
	<script src="Scripts/jquery.signalR-2.0.2.js"></script>
	<!--Reference the autogenerated SignalR hub script. -->
	<script src='signalr/hubs'></script>
	<!--Add script to update the page and send messages.-->
	<script type='text/javascript'>
		$(function () {
			// Declare a proxy to reference the hub.
			var chat = $.connection.ViewDataHub;
			//init the client function 
			init(chat);
			$("#btnclick").click(function () {
				//Response the information
				$.connection.hub.start().done(function () {
					chat.server.hello().done(function (res) {
						alert(res);
					})//end of done function
				})//the end of the $.connection
			})//end of click function
			$("#btntalk").click(function () {
				$.connection.hub.start().done(function () {
					chat.server.sendMessag($("#txttalk").val());
					$("#txttalk").val("");
				})//the end of the $.connection
			});//btntalk end
		})
		//init the client method
		function init(chat) {
			chat.client.talk = function (message) {
				var talk = "<h1>" + message + "</h1>";
				$("#dvtalk").append(talk);
			} //end regist the client function
		} //end of the initfunction
	</script>
</head>
<body>
	<div>
		<table id="tbtoday"></table>
		<input type="text" id="txttalk" width="150"/>
		<input type="button" id="btnclick" value="clickme" />
		<input type="button" id="btntalk" value="talkwithme" />
		<div id="dvtalk">
		</div>
	</div>
</body>
</html>

出现的效果:

两个窗口之间的聊天

我知道你心中肯定有疑问,我也是这样,当我刚接触的时候完全搞不懂这是为什么会这样,我们来回顾一次正常的聊天过程:

客户端A发送信息->服务端接收->服务端Post消息给客户端B

那我们重新拆分以上的方法来证明我们的猜想是否正确

$("#btntalk").click(function () {
                $.connection.hub.start().done(function () {
                    chat.server.sendMessag($("#txttalk").val());
                    $("#txttalk").val("");
                })//the end of the $.connection

            });//btntalk end

chat.server.sendMessage(message) 从客户端调用了服务器的方法(服务器扮演的是中转站的角色).

此时的message 从客户端A发送给了服务端

那服务器就应该有这样的一个方法与之相对应

后台代码:

1    //this fucntion will be called by client and the inside function 
2         //Clients.Others.talk(message);
3         //will be called by clinet javascript function .
4         public void SendMessag(string message)
5         {
6             Clients.Others.talk(message);
7         }

服务端接收到A发送来的message.

这个时候服务端将消息推送给客户端B

Clients.Others.talk(message);

这个时候客户端B应该有一个talk的方法来将消息显示出来

 1   //init the client method
 2         function init(chat) {
 3 
 4             chat.client.talk = function (message) {
 5                 var talk = "<h1>" + message + "</h1>";
 6 
 7                 $("#dvtalk").append(talk);
 8 
 9             } //end regist the client function
10 
11         } //end of the initfunction

这个时候客户端B接收到消息,用Js的方法显示出来消息. 一次通话就完成了.

<------------二,客户端传递参数给服务端并从服务端得到返回值:<------------

前端代码:

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <!--Script references. -->
 6     <!--Reference the jQuery library. -->
 7     <script src="Scripts/jquery-1.10.2.min.js"></script>
 8     <!--Reference the SignalR library. -->
 9     <script src="Scripts/jquery.signalR-2.0.2.js"></script>
10     <!--Reference the autogenerated SignalR hub script. -->
11     <script src='signalr/hubs'></script>
12     <!--Add script to update the page and send messages.-->
13     <script type='text/javascript'>
14 
15 
16         $(function () {
17             // Declare a proxy to reference the hub.
18             var chat = $.connection.ViewDataHub;
19 
20 
21             //init the client function 
22             init(chat);
23 
24 
25             $("#btnclick").click(function () {
26                 //Response the information
27                 $.connection.hub.start().done(function () {
28                     chat.server.hello($("#txttalk").val()).done(function (res) {
29                         var talk = "<h1>" + res + "</h1>";
30 
31                         $("#dvtalk").append(talk);
32                     })//end of done function
33                 })//the end of the $.connection
34             })//end of click function
35 
36 
37 
38             $("#btntalk").click(function () {
39                 $.connection.hub.start().done(function () {
40                     chat.server.sendMessag($("#txttalk").val());
41                     $("#txttalk").val("");
42                 })//the end of the $.connection
43 
44             });//btntalk end
45 
46         })
47 
48 
49         //init the client method
50         function init(chat) {
51 
52             chat.client.talk = function (message) {
53                 var talk = "<h1>" + message + "</h1>";
54 
55                 $("#dvtalk").append(talk);
56 
57             } //end regist the client function
58 
59         } //end of the initfunction
60 
61     </script>
62 </head>
63 <body>
64     <div>
65         <table id="tbtoday"></table>
66         <input type="text" id="txttalk" width="150"/>
67         <input type="button" id="btnclick" value="clickme" />
68         <input type="button" id="btntalk" value="talkwithme" />
69         <div id="dvtalk">
70 
71         </div>
72     </div>
73 </body>
74 </html>
View Code

后端代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using Microsoft.AspNet.SignalR;
 6 using Microsoft.AspNet.SignalR.Hubs;
 7 
 8 namespace SignalRChat.Hubs.Data
 9 {
10     [HubName("ViewDataHub")]
11     public class ViewDataHub : Hub
12     {
13         //this is just called by client and return the value for it .
14         public string Hello(string msg)
15         {
16 
17             string res = "sorry ,i don't know";
18             if (msg.Contains("hello"))
19             {
20                 res = "hello ,guy";
21             }
22             if (msg.Contains("how"))
23             {
24                 res = "how are you ~";
25             }
26             if (msg.Contains("love"))
27             {
28                 res = "don't fall in love with me ~";
29             }
30             return res;
31         }
32 
33 
34 
35         //this fucntion will be called by client and the inside function 
36         //Clients.Others.talk(message);
37         //will be called by clinet javascript function .
38         public void SendMessag(string message)
39         {
40             Clients.Others.talk(message);
41         }
42 
43     }
44 }
View Code

效果图:

<------------三,客户端刷时时的刷新数据<------------ 

前端:

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6     <script src="Scripts/jquery-1.6.4.min.js"></script>
 7     <script src="Scripts/jquery.signalR-2.2.0.min.js"></script>
 8     <script src='signalr/hubs'></script>
 9     <script>
10         var chat;
11         var arr = [];
12         var loopdo;
13         //
14         $(function () {
15             // Created proxy            
16             chat = $.connection.viewDataHub;
17             Init(chat);
18             //on the start done
19             $.connection.hub.start().done(function () {
20 
21                 $("#btnloop").click(function () {
22                     chat.server.refresh().done(function (data) {
23                         AppendTable(data);
24                     })//done end
25                 }) //btnloop  end
26 
27 
28                 $("#btnclient").click(function () {
29                     chat.server.RefreshClients();
30                 });
31 
32 
33                 $("#btnclick").click(function () {
34                     Start();
35                 });
36 
37 
38                 $("#btnstop").click(function () {
39                     Stop();
40                 });
41 
42             })
43         }) //$function
44 
45 
46         function Start() {
47             if (loopdo == null) {
48                 loopdo = setInterval('$("#btnloop").click()', 1000);
49             }
50 
51         }
52 
53         function Stop() {
54             if (loopdo != null) {
55                 clearInterval(loopdo);
56             }
57         }
58 
59         function AppendTable(data) {
60             arr.length = 0;
61             arr.push("<tr><th>Opendoor</th><th>Price</th><th>Opentiem</th></tr>");
62             $.each(data, function (i) {
63                 arr.push("<tr>");
64                 arr.push("<td>" + data[i].Opendoor + "</td>");
65                 arr.push("<td>" + data[i].Price + "</td>");
66                 arr.push("<td>" + data[i].Opentiem + "</td>");
67                 arr.push("</tr>");
68             });
69             $("#tblist").html(arr.join(""));
70         }
71 
72         function Init(chat) {
73             chat.client.myrefresh = function (data) {
74                 AppendTable(data);
75             }
76 
77         }
78 
79     </script>
80 </head>
81 <body>
82     <input type="button" id="btnclick" value="Start" />
83 
84     <input type="button" id="btnloop" value="View" style="display: none" />
85 
86     <input type="button" id="btnstop" value="Stop" />
87 
88     <input type="button" id="btnclient" value="ClientAll" />
89     <table id="tblist">
90     </table>
91 </body>
92 
93 
94 
95 </html>
View Code

后端:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using Microsoft.AspNet.SignalR;
 6 using Microsoft.AspNet.SignalR.Hubs;
 7 namespace MyReresh.ViewData
 8 {
 9     [HubName("viewDataHub")]
10     public class ViewDataHub : Hub
11     {
12         [HubMethodName("refresh")]
13         public List<Stock> Refresh()
14         {
15             return Stock.GetAll();
16         }
17 
18         [HubMethodName("RefreshClients")]
19         public void RefreshClients()
20         {
21             Clients.All.myrefresh(Stock.GetAll());
22         }
23 
24 
25     }
26 
27     public class Stock
28     {
29         private string opendoor;
30 
31         public string Opendoor
32         {
33             get { return opendoor; }
34             set { opendoor = value; }
35         }
36 
37         private double price;
38 
39         public double Price
40         {
41             get { return price; }
42             set { price = value; }
43         }
44 
45         private DateTime opentiem = System.DateTime.Now;
46 
47         public DateTime Opentiem
48         {
49             get { return opentiem; }
50             set { opentiem = value; }
51         }
52 
53 
54         public static List<Stock> GetAll()
55         {
56             Random rand = new Random();
57             List<Stock> list = new List<Stock>() 
58             {
59                 new Stock{Opendoor="Door1",Price=rand.NextDouble()*100},
60                 new Stock{Opendoor="Door2",Price=rand.NextDouble()*100},
61                 new Stock{Opendoor="Door3",Price=rand.NextDouble()*100}
62             };
63             return list;
64         }
65 
66     }
67 }
View Code

注:本次实现的所谓的时时刷新数据和官方提供的Demo有很大的差异,并不是后台代码的角度来刷新,而是从前端的角度来实现的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的SignalR示例,其中客户端将接收服务器发送的消息,并在网页上显示它们。 服务器端: ```csharp using Microsoft.AspNetCore.SignalR; using System.Threading.Tasks; namespace SignalRChat.Hubs { public class ChatHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } } } ``` 客户端: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>SignalR Chat Example</title> </head> <body> <input type="text" id="userInput" placeholder="Enter your name" /> <input type="text" id="messageInput" placeholder="Enter your message" /> <button id="sendButton">Send</button> <ul id="messagesList"></ul> <!-- SignalR JavaScript library --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.8/signalr.min.js"></script> <script> // create connection instance const connection = new signalR.HubConnectionBuilder() .withUrl("/chatHub") .configureLogging(signalR.LogLevel.Information) .build(); // start connection connection.start().catch(err => console.error(err.toString())); // send message to server document.getElementById("sendButton").addEventListener("click", event => { const user = document.getElementById("userInput").value; const message = document.getElementById("messageInput").value; connection.invoke("SendMessage", user, message).catch(err => console.error(err.toString())); event.preventDefault(); }); // receive message from server connection.on("ReceiveMessage", (user, message) => { const li = document.createElement("li"); li.textContent = `${user}: ${message}`; document.getElementById("messagesList").appendChild(li); }); </script> </body> </html> ``` 在此示例中,我们创建了一个名为“ChatHub”的SignalR集线器,它具有一个名为“SendMessage”的方法,该方法将消息广播给所有连接的客户端。在客户端,我们首先创建一个连接实例,然后启动它并使用它调用“SendMessage”方法以将消息发送到服务器。我们还订阅了名为“ReceiveMessage”的事件,以便在从服务器接收消息时更新网页上的消息列表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值