湖南建设局网站大连网站开发培训班

news/2025/9/24 4:49:15/文章来源:
湖南建设局网站,大连网站开发培训班,多行业品牌企业公司网站模板,建网站怎么分类1 概要说明 使用微信扫描登录相信大家都不会陌生吧#xff0c;二维码与手机结合产生了不同应用场景#xff0c;基于二维码的应用更是比较广泛。为了满足ios、android客户端与web短信平台的结合#xff0c;特开发了基于SinglarR消息推送机制的扫描登录。本系统涉及到以下知识… 1 概要说明     使用微信扫描登录相信大家都不会陌生吧二维码与手机结合产生了不同应用场景基于二维码的应用更是比较广泛。为了满足ios、android客户端与web短信平台的结合特开发了基于SinglarR消息推送机制的扫描登录。本系统涉及到以下知识点     SignalRhttp://signalr.net/ 这官网ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库可以简化开发人员将实时 Web 功能添加到应用程序的过程。实时 Web 功能是指这样一种功能当所连接的客户端变得可用时服务器代码可以立即向其推送内容而不是让服务器等待客户端请求新的数据。     二维码使用的QRCode类库https://github.com/jeromeetienne/jquery-qrcode     MVC5开发环境是基于MVC5 2、系统关系图     在实现本功能前有点不是太确定能否拿下。     所谓万事开头难通过查询想资料及自己归纳分析系统涉及到手机客户端、浏览者、服务端实现扫描登录也就是三者之间是如何协调工作的。通过axure画出如下关系图 移动客户端、浏览者、服务端三者协作关系图     【M】表示移动端   【B】表示浏览者浏览器客户端  【S】服务端消息推送者及扫描认证接口发布者     步骤说明     Step步骤1  【B】浏览登录页面Step2【S】产生一个标识符UUID并推送给B生成登录二维码     Step3【M】扫描二维码前提条件是【M】已登录Step4【M】解析二维码信息获取UUID     Step5【M】向服务端发送UUID登录信息Step6【S】对UUID登录信息进行相关解析认证Step6 UUID认证不通过认证则到Step6-1 重新生成UUID循环Step 2与并Step6-2 返回给【M】UUID认证失败原因Step6 通过认证Step6-2转到登录信息认证Step 7登录信息认证失败Step7-3重新生成UUID循环Step 2成功则Step7-1推送给【B】跳转到首页。 3、SignalR循环消息推送 3.1 引用SignalR     由于本人用的是VS15Preview4可以直接使用Nuget可视化管理工具进行安装Tools—Nuget Package Manager—Manage Nuget Packages for Solution…打开以下界面     在Browser 标签下输入SignalR查询到Microsoft.AspNet.SignalR     找到对应的项目点击“Install”安装按钮即可引用相关类库同时应用下载相关js库。     关于SignalR的知识点可以到官网 http://www.asp.net/signalr 进行深入学习。 3.2 服务端SignalR实现     服务端要向客户端推送UUID对于UUID唯一标识符具有重要特性1有时间限制120秒之内扫码有效2具有一定的状态。对应的声明周期就是生成—推送—状态判断—手机端扫描—验证UUID—状态判断—销毁等系列过程。     服务端的核心代码将单独建立一个项目去实现 3.2.1 Nofifier.cs通知类     本类将连接QRCodeHub与SessionTimer 3.2.2 QRCodeHub.cs SignalR核心实现     SignalR的核心代码 using Microsoft.AspNet.SignalR;using System.Threading.Tasks; namespace TxSms.SingalR {        /// summary/// 二维码推送        /// /summary//[HubName(qrcode)]public class QRCodeHub : Hub{            /// summary/// 给客户端发送时间间隔            /// /summary/// param nametime/parampublic void SendTimeOutNotice(int time){Clients.Client(Context.ConnectionId).alertClient(time);}                    public void CheckElapsedTime(int time){Clients.Client(Context.ConnectionId).sendElapsedTime(time);}                        /// summary/// 发送二维码UUID内容              /// /summary/// param nameuuid/parampublic void SendQRCodeUUID(string uuid){Clients.Client(Context.ConnectionId).sendQRCodeUUID(uuid);}              /// summary/// Called when the connection connects to this hub instance.              /// /summary/// returnsA see crefT:System.Threading.Tasks.Task //returnspublic override Task OnConnected(){SessionTimer.StartTimer(Context.ConnectionId);      return base.OnConnected();}                  /// summary/// Called when a connection disconnects from this hub gracefully or due to a timeout.        /// /summary/// param namestopCalled/// true, if stop was called on the client closing the connection gracefully;        /// false, if the connection has been lost for longer than the        /// see crefP:Microsoft.AspNet.SignalR.Configuration.IConfigurationManager.DisconnectTimeout /.        /// Timeouts can be caused by clients reconnecting to another SignalR server in scaleout.        /// /param/// returnsA see crefT:System.Threading.Tasks.Task //returnspublic override Task OnDisconnected(bool stopCalled){SessionTimer.StopTimer(Context.ConnectionId);            return base.OnDisconnected(stopCalled);}            /// summary/// Called when the connection reconnects to this hub instance.        /// /summary/// returnsA see crefT:System.Threading.Tasks.Task //returnspublic override Task OnReconnected(){                      if (!SessionTimer.Timers.ContainsKey(Context.ConnectionId)){SessionTimer.StartTimer(Context.ConnectionId);}            return base.OnReconnected();}                /// summary/// 重置时钟            /// /summarypublic void ResetTimer(){SessionTimer timer;                 if (SessionTimer.Timers.TryGetValue(Context.ConnectionId, out timer)){timer.ResetTimer();}                      else{SessionTimer.StartTimer(Context.ConnectionId);}}        /// summary/// 发送普通消息                /// /summary/// param namename/param/// param namemessage/parampublic void Send(string name, string message){Clients.All.addNewMessageToPage(name, message);}} } 3.2.3 SessionTimer.cs 对应客户端时钟     对【B】来说每个都产生一个timer进行按1s间隔发送消息。 using System;using System.Collections.Concurrent;using System.Timers; namespace TxSms.SingalR {         public class SessionTimer : IDisposable{         /// summary/// 存储客户端对应的Timer            /// /summarypublic static readonly ConcurrentDictionarystring, SessionTimer Timers;              private readonly Timer _timer;        static SessionTimer(){Timers new ConcurrentDictionarystring, SessionTimer();}                  /// summary/// 构造函数        /// /summary/// param nameconnectionId/paramprivate SessionTimer(string connectionId){ConnectionId connectionId;_timer new Timer{Interval Utility.ActivityTimerInterval()};_timer.Elapsed (s, e) MonitorElapsedTime();_timer.Start();}                    public int TimeCount { get; set; }                /// summary/// 客户端连接Id              /// /summarypublic string ConnectionId { get; set; }              /// summary/// 启动Timer              /// /summary/// param nameconnectionId/parampublic static void StartTimer(string connectionId){                         var newTimer new SessionTimer(connectionId);                   if (!Timers.TryAdd(connectionId, newTimer)){newTimer.Dispose();}}                        /// summary/// 停止Timer        /// /summary/// param nameconnectionId/parampublic static void StopTimer(string connectionId){SessionTimer oldTimer;            if (Timers.TryRemove(connectionId, out oldTimer)){oldTimer.Dispose();}}                /// summary/// 重置Timer              /// /summarypublic void ResetTimer(){TimeCount 0;_timer.Stop();_timer.Start();}                public void Dispose(){            // Stop might not be necessary since we call Dispose            _timer.Stop();_timer.Dispose();}                            /// summary/// 给客户端发送消息         /// /summaryprivate void MonitorElapsedTime(){Utility.ClearExpiredUUID();            var uuid Utility.GetUUID(ConnectionId);            //if (TimeCount Utility.TimerValue())            //{            //    StopTimer(ConnectionId);            //    Notifier.SendQRCodeUUID(ConnectionId, uuid);            //    Notifier.SessionTimeOut(ConnectionId, TimeCount);            //}            //else            //{            Notifier.SendQRCodeUUID(ConnectionId, uuid);Notifier.SendElapsedTime(ConnectionId, TimeCount);            //}TimeCount;            if (TimeCount 1000){TimeCount 0;}}} } 3.2.4 Utility.cs 基础配置     满足时钟、获取QRCode等 using TxSms.Actions; namespace TxSms.SingalR {      internal class Utility{              public static int IntNum 0;            /// summary/// 时间间隔              /// /summary/// returns/returnspublic static int TimerValue(){            return 1000;}              public static double ActivityTimerInterval(){                       return 1000.0;}                /// summary/// 获取当前UUID              /// /summary/// returns/returnspublic static string GetUUID(string connectionId){            try{                var model new QRCodeAction().GetValidModel(connectionId);                return model.ToJson(connectionId);}            catch{                return ERROR;}}                /// summary/// 删除过期UUID              /// /summarypublic static void ClearExpiredUUID(){IntNum;            if (IntNum 1000) return;            new QRCodeAction().ClearExpiredUUID();IntNum 0;}} } 3.2.5 SignalR在MVC中启动配置     在MVC中启动项目进行如下配置 3.2.6 其他类库说明     QRCodeAction.cs维护UUID创建、保存、状态更改、删除等。     QRModel.csUUID实体     所有文件可在《6、相关文件》中下载。 3.3 客户端SignalR实现     添加SignalR js库    script typetext/javascript src~/Scripts/jquery.signalR-2.2.1.min.js/scriptscript typetext/javascript src~/signalr/hubs/script     两者必须都引用。     调用接口如下       以上代码包括相关二维码的生成。 4、二维码的生成与存储数据解析 4.1 二维码的生成        二维码类库选择https://github.com/jeromeetienne/jquery-qrcode 一个QRCode原生态js类库jquery对其进行了扩展。     添加script标签 script typetext/javascript src~/Scripts/qrcode.min.js/scriptscript typetext/javascript src~/Scripts/jquery.qrcode.min.js/script     定义div标签用来呈现二维码     呈现二维码 $(#divQRCode).html();$(#divQRCode).qrcode({ width: 180, height: 180, correctLevel: 0, text: codeUUID });     通过3与4可实现具有120秒生命周期二维码的生成对于不同的浏览者生成的二维码是不同的效果如下 4.2 二维码存储的是什么     二维码生成了但是存储的是什么呢首先我们看下以下的二维     显然扫描这两个图片上的二维码会得到不同的结果。     在本系统中二维码存储的是一个json对象格式为 {connectionid:19c12e95-26d7-410c-8292-2a3afdd1a4da,uuid:a04702df-6a52-4e1c-be8b-9b3dbeef4d72,islogin:0,isvalid:1}connectionid客户端与SignalR联系的id其格式为Guid uuid对应connectionid产生的一个唯一标识符其格式为Guidislogin当前connectionid连接是否已登录1—表示登录0—未登录isvalid当前connectionid对应的uuid是否有效1—表示有效0—表示失效     手机客户端扫描之后可根据这些参数情况进行判断是否向服务端发送请求。在做扫描应用比如扫描登录时要依据业务场景进行消息传递生成对应二维码并不局限于json对象、url地址等。 5、扫描认证接口     为了满足【M】端扫描之后提交UUID用户信息进行认证建立QRCode API接口。接口任务比较简单就是对UUID合法性进行判断然后判断用户信息登录情况更改UUID的登录状态。 5.1 输入参数 5.2 输出参数 5.3 API接口 6、总结与下载     二维码应用比较广泛记得去北京的故宫旁边的中山公园里面的古树也有二维码扫描可查看相关联信息。紧紧对于二维码而言就是存储有限信息但就是这有限的信息可以将庞大的信息系统连接一起所用的应用不是前沿技术的突破而是我们思考问题方式的转变、思维角度的变化。由于二维码具有信息存储的独特性可在以下方面应用 信息获取名片、地图、WIFI密码、资料网站跳转跳转到微博、手机网站、网站广告推送用户扫码直接浏览商家推送的视频、音频广告手机电商用户扫码、手机直接购物下单防伪溯源用户扫码、即可查看生产地同时后台可以获取最终消费地)优惠促销用户扫码下载电子优惠券抽奖会员管理用户手机上获取电子会员信息、VIP服务手机支付扫描商品二维码通过银行或第三方支付提供的手机端通道完成支付     由于最近在做短信业务平台将二维码应用到营销管理中每个业务人员具有独立的推广二维码客户扫码可进行短信测试若注册成为会员则就是本业务人员的直属客户可查看《二维码在短信业务应用的初步构思》。     最后上传《基于SignalR的消息推送与二维码描登录实现》主要文件下载http://files.cnblogs.com/files/zsy/signalr%E4%B8%8Eqrcode.rar 相关文章: ASP.NET SignalR 高可用设计ASP.NET SignalR 2.0入门指南SignalR SelfHost实时消息,集成到web中实现服务器消息推送ASP.NET WebHooks Receivers 介绍-WebHooks 让其变得便捷Signalr系列之虚拟目录详解与应用中的CDN加速实战采用HTML5SignalR2.0(.Net)实现原生Web视频基于.NET SingalR,LayIM2.0实现的web聊天室 原文地址https://github.com/fanpan26/LayIM_NetClient/ .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注 原文地址http://www.cnblogs.com/zsy/p/5882034.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914881.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设永远在路上国际购物网站有哪些

摘 要 本系统为用户而设计制作旅游信息管理系统,旨在实现旅游信息智能化、现代化管理。本旅游信息管理自动化系统的开发和研制的最终目的是将旅游信息的运作模式从手工记录数据转变为网络信息查询管理,从而为现代管理人员的使用提供更多的便利和条件…

信贷 网站模板 下载网站文字规划

1、GitHub遭遇严重的供应链“投毒”攻击,影响GG平台 多年来,威胁行为者一直在使用多种策略、技术和程序 (TTP),包括劫持 GitHub账户、分发恶意 Python 包、使用虚假的 Python 基础设施以及社会工程进行攻击&#xff0c…

网站建设如何创建框架页面记事本代码做网站

执行流程 spring中Bean对象的执行流程大致分为四步: 启动Spring容器实例化Bean对象Bean对象注册到Spring容器中将Bean对象装配到所需的类中 ①启动Spring容器,在main方法中获取spring上下文对象并配备spring. import demo.*;import org.springframework.context.Applicati…

企业网站建设推广含义重庆潼南网站建设公司电话

一、前言 随着深度学习在图像、语言、广告点击率预估等各个领域不断发展,很多团队开始探索深度学习技术在业务层面的实践与应用。而在广告CTR预估方面,新模型也是层出不穷: Wide and Deep[^1]、DeepCross Network[^2]、DeepFM[^3]、xDeepFM[^…

广德做网站护肤品网站制作 网新科技

关于JSP页面无法加载css,游览器访问jsp页面样式未生效导致乱序 1.修改自己过滤器中对编码格式的修改 如图: 代码如下: public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOE…

制作外贸网站开发asp.net 价格查询网站

为什么使用消息队列(如RocketMQ)? 异步处理:解耦系统间调用,提高响应速度。解耦:降低模块间的直接依赖,使系统更易于扩展和维护。流量削峰:在高峰期将请求暂时存储起来,…

长沙做网站一般多少钱wordpress如何添加注册登录

1.链表 1.1 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表 中的指针链接次序实现的 。 现实中:链表就像是一列动车,一节连着一节 数据结构中的链表 注意: 1.从上图可看出…

xampp做网站可以吗清远做网站的公司

任务已完成,聚类效果很好(主要在于数据的处理以及特征工程), 需代码si,yuer有限先到先得。

网站建设后怎么写网站开发建设好处

|疑惑 最近在学习Python的过程中了解到位运算符,但对于按位取反有点迷糊,就比如说~9(按位取反)之后的结果是-10,为什么不是6呢?所以下面就来看看为什么不是6,正确结果是如何计算出来的呢&#x…

深圳网站建设科技有限公司住房和城乡建设部网站科技项目

目录 1、直接执行JS代码 🌐 1.1 execute_script基础用法 1.2 带参数执行JS函数 1.3 获取执行结果 2、使用execute_async_script异步执行 🔄 2.1 适用场景分析 2.2 实现异步操作示例 2.3 错误处理与调试技巧 3、JS与页面元素交互 👤 3.1 修改DOM属性 3.2 触发事…

怎么做出有品牌感的网站分析不同网站的优缺点

文章目录 前言一、为什么推荐使用java.time包的LocalDateTime而不是java.util的Date?二、使用LocalDateTime和LocalDate时遇到了哪些坑?2.1 Redis序列化报错2.1.1 问题现象2.1.2 问题分析2.1.3 解决方案 2.2 LocalDateTime和LocalDate类型的属性返回给前…

大良营销网站建设咨询阿里云 rds wordpress

使用 Service 把前端连接到后端 如何创建前端(Frontend)微服务和后端(Backend)微服务。后端微服务是一个 hello 欢迎程序。 前端通过 nginx 和一个 Kubernetes 服务暴露后端所提供的服务。 使用部署对象(Deployment ob…

苏州企业建设网站网站建设卖点

useInperativeHandle是通过ref暴露子组件中的方法 1.场景说明-直接调用子组件内部的方法 import { forwardRef, useImperativeHandle, useRef } from "react"// 子组件const Son forwardRef((props, ref) > {// 实现聚焦逻辑const inputRef useRef(null)const …

网站收录 作用wordpress博客视频教程

欢迎您成为我的读者,希望这篇文章能给你一些帮助。前言今天咱们一起来看看在C#中如何使用NPOI第三方控件进行数据的导出。关于NPOI插件网上资料很多,大家感兴趣的可以去看看。本文使用的版本是NPOI 2.5.1。大家可在包管理器NuGet或者下面网址进行下载。h…

阿里巴巴个人网站怎么做个人网站建设的步骤

Linux mren命令介绍 mren(全称multiple rename),它是用来对多个文件进行重命名的工具。这个命令在一次操作中可以批量改变多个文件的名称,特别是在需要对大量文件进行重命名时,mren将节省大量的时间和努力。 Linux m…

无锡建设网站制作垂直型电商网站如何做

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

如何看网站的建站时间企业网站 手机站

文章目录 基于pytorch的LSTM进行字符集文本生成前言一、数据集二、代码实现 1.到入库和LSTM进行模型构建2.数据预处理函数3.训练函数4.预测函数5.文本生成函数6.主函数完整代码总结 前言 本文介绍了机器学习中深度学习的内容使用pytorch构建LSTM模型进行字符级文本生成任务 一…

怎么创建自己的网站临海建设规划信息网网站

前端实现获取后端返回的文件流并下载 方法一:使用Axios实现文件流下载优点缺点 方法二:使用封装的Request工具实现文件流下载优点缺点 方法三:直接通过URL跳转下载优点缺点 结论 在前端开发中,有时需要从后端获取文件流&#xff0…

重庆市有网站设计维护四川手机网站设计方案

树型结构 树的概念 树是一种非线性结构,他是由n(n>0)个有限结点组成的一个具有层次关系的集合。 当n0时,该树为空树。 在任意一个非空树中都满足以下条件: 1、有一个特殊的结点,称为根结点&#xff0c…

wordpress付费站内搜索零基础网站开发要学多久

一 中断 中断,即cpu暂停执行当前程序,转而执行另外一段特殊程序,处理结束后。返回之前暂停程序继续执行。 中断向量,中断服务程序的入口地址,每个中断源都对应一个固定的入口地址。 中断服务函数,内核响应中…