栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

2021-10-19

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-19

SignalR 服务端与客户端的简单信息推送
  • 前言
  • 一、SignaleR是什么?
  • 二、使用步骤
    • 1.建立服务器端
    • 建立winform服务器端代码如下(示例):
  • !!! 当你看到这可能疑惑为什么会有两个服务端,这呢使我写案例时偷懒了,就把两个弄一起了,你可以把这个看成两个项目一个是Winform(服务端)+Mvc(客户端)+SignalR,另一个Mvc(服务端+客户端)+SignalR
    • 建立mvc服务器端代码如下(示例):
    • 2.建立客户端
    • 客户端代码如下(示例):
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、SignaleR是什么?

可以简单理解为一个服务器端与客户端的双向通道。实时由服务器端将内容推送到连接的客户端,而不是让服务器等待客户端请求新的数据。

二、使用步骤 1.建立服务器端 建立winform服务器端代码如下(示例):

1.创建Winform窗体 ,命名SignalRService
2.添加新项-OWIN Startup类

3. 安装两个NuGet包
Microsoft.Owin.SelfHost
Microsoft.AspNet.SignalR.SelfHost

4.创建MoveTextHub类,需要继承于: Hub。在类上面添加[HubName(“getMessage”)]Hub的别名,方便前台调用

using Microsoft.AspNet.SignalR;

using Microsoft.AspNet.SignalR.Hubs;

//Hub的别名,方便前台调用
//[HubName("getMessage")]
public class MyHub : Hub
{
    /// 
    /// 编写发送信息的方法
    /// 
    /// 
    /// 
    public void Send(string name, string message)
    {
        //调用所有客户注册的本地的JS方法(addMessage)
        Clients.All.addMessage(name, message);
    }
} 

5.设置刚刚创建的Startup1

using Microsoft.Owin.Cors;
using Owin;

namespace SignalRService
{
    public class Startup1
    {
        public void Configuration(IAppBuilder app)
        {
            // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?linkID=316888
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }
}

6.主窗体,两个按钮,一个启动,一个停止,还有一个文本框,用于显示输出信息。

using System;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Owin.Hosting;

namespace SignalRService
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public IDisposable SignalR { get; set; }
        private const string ServerUri = "http://localhost:8888"; // SignalR服务地址

        /// 
        /// 启动服务
        /// 
        /// 
        /// 
        private void BtnStart_Click(object sender, EventArgs e)
        {
            BtnStart.Enabled = false;

            WriteToConsole("正在启动服务...");
            Task.Run(() => { BtnStart.Enabled = !StartServer(); }); // 异步启动SignalR服务
             
            //Task.Run(() => StartServer()); // 异步启动SignalR服务
            //Task.Run(() =>
            //{
            //    BtnStart.Enabled = !StartServer();
            //bool flag = StartServer();
            //BtnStart.Invoke(new Action((f) => BtnStart.Enabled = !f), flag);

            // }); // 异步启动SignalR服务

            //BtnStart.Enabled = !StartServer();
        }

        /// 
        /// 停止服务
        /// 
        /// 
        /// 
        private void BtnStop_Click(object sender, EventArgs e)
        {
            SignalR.Dispose();
            Close();
        }


        /// 
        /// 启动SignalR服务,将SignalR服务寄宿在WPF程序中
        /// 
        private bool StartServer()
        {
            try
            {
                SignalR = WebApp.Start(ServerUri);  // 启动SignalR服务
            }
            catch (Exception ex)
            {
                WriteToConsole(ex.Message);
                return false;
            }

            WriteToConsole("服务已经成功启动,地址为:" + ServerUri);
            return true;
        }

        private delegate void WriteToConsoleDe(string msg);
        /// 
        /// 将消息添加到消息列表中
        /// 
        /// 
        public void WriteToConsole(string message)
        {
            if (TxtConsole.InvokeRequired)
            {
                TxtConsole.Invoke(new Action((string msg) => TxtConsole.AppendText(message + Environment.newline)), message);
                return;
            }

            TxtConsole.AppendText(message + Environment.newline);
        }



    }
}
!!! 当你看到这可能疑惑为什么会有两个服务端,这呢使我写案例时偷懒了,就把两个弄一起了,你可以把这个看成两个项目一个是Winform(服务端)+Mvc(客户端)+SignalR,另一个Mvc(服务端+客户端)+SignalR 建立mvc服务器端代码如下(示例):

1.创建Mvc
2.安装SignalRGet包
Microsoft.AspNet.SignalR
3.创建Hubs文件夹
并在其中新建项->SignalR->SignalR Hub Class (V2)命名MyHub
4.更新MyHub

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;

namespace SignalRChatMVC5.Hubs
{
    public class MyHub : Hub
    {
        public void Send(string name, string message)
        {
            // Call the addNewMessageToPage method to update clients.
            Clients.All.addNewMessageToPage(name, message);
        }
    }
}

5.添加新项-OWIN Startup类

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(SignalRChatMVC5.Startup))]
namespace SignalRChatMVC5
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            app.MapSignalR();
        }
    }
}

6.在 HomeController 中添加方法 MyChat并新添视图

@{
    ViewBag.Title = "Chat";
}

Chat

    @section scripts { }
    2.建立客户端 客户端代码如下(示例):

    1.创建新的MVC
    2.添加GIT包
    Microsoft.AspNet.SignalR.Javascript.Client
    3.添加HTML页面,命名为:SendMessage.html
    代码如下:

    
    
    
        SignalR Simple Chat
        
    
    
        

      源码下载:[winfrom服务端mvc客户端](https://pan.baidu.com/s/1bpayjT1) 总结

      这个是两项目的拼凑,可能会对阅读者产生误导,这属于我自己的理解,也转载了他人的内容,看了太多的具体都有谁的忘了,如果作者看到了,请及时联系我@我的邮箱:1850647211@qq.com//或者加我qq,记得备注哦!!!
      反正记住一点它是一个双性通道,从服务端推送实时给客户端。
      有不懂的可以参微软官网的SignalR指南

      转载请注明:文章转载自 www.mshxw.com
      本文地址:https://www.mshxw.com/it/342103.html
      我们一直用心在做
      关于我们 文章归档 网站地图 联系我们

      版权所有 (c)2021-2022 MSHXW.COM

      ICP备案号:晋ICP备2021003244-6号