向发动机投掷硬币,玫子甜品菜单,箫教程
右键点击项目->然后选择“添加” >“客户端库”
提供程序选择:unpkg ,库选择:@aspnet/signalr@1.1.4
选择“选择特定文件” ,展开“dist/browser” 文件夹,然后选择“signalr.js” 和“signalr.min.js”
选择指定位置安装即可
创建messagehub 并继承hub。hub类管理连接、组和消息
using system.collections.generic; using system.threading.tasks; using microsoft.aspnetcore.signalr; namespace netcorewebapi.signalr { /// <summary> /// message集线器 /// </summary> public class messagehub : hub { /// <summary> /// 存放已连接信息 /// </summary> public static readonly dictionary<string, string> connections = new dictionary<string, string>(); /// <summary> /// 发送消息 /// </summary> /// <param name="loginno"></param> /// <param name="message"></param> /// <returns></returns> public async task sendmessage(string loginno, string message) { connections.trygetvalue(loginno, out string clientid); //receivemessage 客户端接受方法 await clients.client(clientid).sendasync("receivemessage", message); } /// <summary> /// 客户端登录成功保存用户账号和客户端id /// </summary> /// <param name="loginno"></param> public void sendlogin(string loginno) { //判断用户有没有登陆过(没登陆过插入用户名和id,登陆过修改用户名和id) if (!connections.containskey(loginno)) { connections.add(loginno, context.connectionid); } else { connections[loginno] = context.connectionid; } } } }
我们需要在startup.cs启动类的configureservices中注册signalr服务
services.addsignalr();
设置signalr路由
//设置signalr路由,指向自定义类messagehub app.usesignalr(route => { route.maphub<messagehub>("/messagehub"); });
注意:usesignalr 必须在 usemvc 之前调用!
引用signalr.js类库文件到html中
<!doctype html> <html> <head> </head> <body> <div style="text-align: center;margin-top: 5%"> <input type="text" id="message" placeholder="消息" /> <button type="button" id="sendbtn">发送</button> </div> <script src="../resources/lib/signalr/dist/browser/signalr.js"></script> </body> </html> <script> var connection = new signalr.hubconnectionbuilder() //配置路由 .withurl("/messagehub") //日志信息 .configurelogging(signalr.loglevel.information) //创建 .build(); //接受消息 connection.on("receivemessage", (message) => { alert("收到消息===>" + message); }); //发送消息 document.getelementbyid("sendbtn").addeventlistener("click", function () { var message = document.getelementbyid('message').value; connection.invoke("sendmessage", "tenghao510@qq.com", message).catch(err => console.error(err.tostring()) ); }); //开始连接 connection.start().then(e => { connection.invoke("sendlogin", "tenghao510@qq.com").catch(err => console.error(err.tostring()) ); }).catch(err => console.error(err.tostring())); </script>
打开html页面,f12在 console 看到打印以下信息说明连接成功。
输入文字,点击发送按钮。(我这里是alert,如有其它需求,可在接收消息回调里面处理逻辑)
将消息从外部发送到 hub。当使用控制器时,需要注入一个 ihubcontext 实例。
using microsoft.aspnetcore.mvc; using microsoft.aspnetcore.signalr; using netcorewebapi.signalr; namespace netcorewebapi.controllers { /// <summary> /// signalr推送 /// </summary> [route("api/hub")] [apicontroller] public class hubcontroller : controller { private readonly ihubcontext<messagehub> _hubcontext; /// <summary> /// 构造函数 /// </summary> /// <param name="hubclients"></param> public hubcontroller(ihubcontext<messagehub> hubclients) { _hubcontext = hubclients; } /// <summary> /// 测试signalr推送 /// </summary> /// <param name="loginno"></param> [httpget] [route("pushmsg")] public void pushmsg(string loginno) { if (string.isnullorwhitespace(loginno)) { //给所有人推送消息 _hubcontext.clients.all.sendasync("receivemessage", "这是控制器发送的消息"); } else { //给指定人推送 messagehub.connections.trygetvalue(loginno, out string id); _hubcontext.clients.client(id).sendasync("receivemessage", "这是控制器发送的消息"); } } } }
调用接口测试
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论