微信互动大屏 霸屏 抢红包 源码及所需技术
当时这个项目是2018年中旬的时候帮一家传媒公司开发的,里面功能很多,但涉及到的技术点并不多,可能是客户需要的功能比较少的原因吧。但还是相当繁琐的,因为里面有很多功能点。
霸屏,抢红包,互动,众筹,提现,打赏,打赏动画,代理等。
项目为.net 4.5,因为当时在考虑大屏与用户要实时的保持同步,用户与用户要保持连接,所以没选择PHP(不是因为php不好,而是我们公司的技术栈为.net,只能用php做一些简单的cms和网站,php大神勿喷)。开始想使用的是轮询,想着有延时,而且并发上来就得炸。后来考虑长连接和H5 WebSocket,起初已经开始着手自己实现了,后来了解到微软对此有专门的解决方案,那就是【SignalR】 ,而且使用起来很简单,稳定性也比较靠谱,会根据用户的所处环境,自动选择轮询,长连接还是WebSocket。
文章最下面是项目效果,当时客户开展了20多家酒吧吧,巅峰的时候也就不到1000个人在线,当时用的服务器是8g,8核的,cpu没超过30%,内存在4个G左右,可能是用户规模还没上来。数据库使用的是Sql server 2008R2,iis 8.5。抢红包这块使用的是redis+lua脚本,比较靠谱。因为当时的霸屏会出现队列的情况,所以也是使用的redis+lua实现的。
设计思路就是每个酒吧,设置一个单独的聊天室,每个用户通过二维码进入之后绑定进该酒吧的聊天室,聊天信息与霸屏信息推送至大屏。刚好signalr都有类型的功能,signalr怎么使用就不在复述了,网上搜下很多,这里只谈下设计思路。
下面是js用户进入的代码
$.connection.hub.qs = { nId:nid }; //后台生成的针对酒吧唯一ID var chat = $.connection.chatHub;chatClientCore = chat.client;$.connection.hub.start().done(function () {chatServerCore = chat.server; console.log("连接成功!");});$.connection.hub.disconnected(function () {if (reConnect == undefined || reConnect==null) {reConnectServer();//重新连接} });
当用户连接入聊天室的时候,在后台将其加入至该酒吧的集合中
public override Task OnConnected(){ //数据连接的时候//UserInfo u = new SessionRedisHub(Context).GetLoginUser();string cid = Context.ConnectionId;//此处nid从前太连接是传过来的参数获取int nId = Convert.ToInt32(Context.QueryString["nId"]);Groups.Add(cid, "node_" + nId);return base.OnConnected();}
这里谈到一个细节,就是如果需要私聊在连接上来的时候就得把cid给保存起来。我们项目中是使用redis做session的,具体实现细节,网上也能搜到,这里没记录网页地址。这里需要着重提一下,就是自己实现的话需要在Startup.ConfigureSignalR中注册IUserIdProvider,代码如下
public static void ConfigureSignalR(IAppBuilder app){var userIdProvider = new MyUserFactory();GlobalHost.DependencyResolver.Register(typeof(IUserIdProvider), () => userIdProvider);//var config = new HubConfiguration();//app.MapSignalR("/chat",config);app.MapSignalR();}//MyUserFactory
public class MyUserFactory : IUserIdProvider{/// <summary>/// 获取当前登陆用户存储的sessionid/// </summary>/// <param name="request"></param>/// <returns></returns>public string GetUserId(IRequest request){string cnnId = new SessionRedis(request).SessionId;if (!string.IsNullOrEmpty(cnnId))return cnnId; return "404";}}
发送私聊的时候直接取sessionID进行user发送就可以了
//群聊代码ChatToNodeInfo nInfo = ChatCorrelation.GetChatNode(cId);Clients.OthersInGroup("node_" + nInfo.MNId).BPtoScreen(nInfo);//私聊代码
Clients.User(new SessionRedisHub(Context).SessionId).test(cPageInfo); //推送大屏
IHubContext ScreenHub = GlobalHost.ConnectionManager.GetHubContext<ScreenHub>();
nInfo.PostTime = DateTime.Now.ToString("MM-dd HH:mm");
ScreenHub.Clients.Group("screen_"+nInfo.MNId).BPtoScreen(nInfo);
大屏和聊天室类似,就是加入的组名不能相同,因为大屏都是单方面接受推送,聊天室的内容想推送至大屏的话,只需要获取到大屏的Hub即可完成推送。
大体实现方案就是这样,使用signal之后实现起来还是比较简单的,具体细节还得看具体业务。
抢红包和霸屏在时间上控制都是使用redis做的,下次有时间在写。
项目部分图片
微信互动大屏 霸屏 抢红包 源码及所需技术相关推荐
- 最新微信合成大西瓜小游戏(合成版)源码+附带流量主功能
正文: 这是一款云开发版的合成大西瓜小游戏微信小程序源码,微信游戏小程序源码. 该小游戏玩法简单,只需要拖动同样的水果落下合成新品众的水果,最终合成大西瓜,玩法酷似俄罗斯方块,相当于换一种形式的俄罗斯 ...
- 抖音账号矩阵同步分发系统,抖音霸屏系统/seo系统源码。
前言:抖音账号矩阵同步分发系统,抖音霸屏系统/seo系统源码.来做到抖音seo优化达到账号排名效果,关键词起到至关重要的作用,依托于抖音平台的正规权限.所在抖音开放者平台申请的的接口来做真正合规的产品 ...
- php表白树洞怎么写,最新微信树洞炫彩版表白墙源码源码分享,七夕情人节互动表白留言墙PHP源码,兼容SAE...
8月份最新微信树洞炫彩版表白墙源码源码分享,七夕情人节互动表白留言墙PHP源码,完美兼容SAE! 程序特点: 1.php代码,完美兼容Sae,PHP空间 2.漂亮的扁平化界面,当前最流行. 3.发布选 ...
- 【湍流】基于matlab kolmogorov结合次谐波补偿大气湍流相位屏【含Matlab源码 2178期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[湍流]基于matlab kolmogorov结合次谐波补偿大气湍流相位屏[含Matlab源码 2178期] 点击上面蓝色字体,直接付费下载 ...
- 抢红包 html 模板,微信抢红包源码和模拟demo
微信抢红包源码和模拟demo 资源下载此资源下载价格为3D币,请先登录 资源文件列表 K_wechat/.classpath , 475 K_wechat/.project , 844 K_wecha ...
- Windows CE/Moblie截屏工具及实现源码
Windows CE/Moblie截屏工具及实现源码 [img]http://dl2.iteye.com/upload/attachment/0084/6997/c72941f2-b86e-3683- ...
- Android 录屏服务使用(源码)
Android 录屏服务使用(源码) 从Android 5.0开始,可以对手机进行录屏,使用场景:如错误场景的视频上传,简单屏幕获取等,下面贴出使用用例和对使用的类一个简单的介绍 - MediaPro ...
- 基于JAVA智慧公寓系统演示录屏2021计算机毕业设计源码+系统+lw文档+部署
基于JAVA智慧公寓系统演示录屏2021计算机毕业设计源码+系统+lw文档+部署 基于JAVA智慧公寓系统演示录屏2021计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...
- 快捷键自动截屏保存图片工具附源码0积分共享
快捷键自动截图保存在工具所在目录,目前快捷键复用的原来的截屏软件,不影响原来截屏键功能.源码公开可免费下载需要者自取,可以根据需要自行修改.用对话框实现的,但是做成了系统托盘图标,没有界面显示,方便后 ...
最新文章
- 终于要揭开神秘面纱?Magic Leap将要展示产品
- 阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,为用户提供基于开源 OLTP、OLAP、BigData 生态的一站式解决方案...
- 小企业是否能用得上ITIL?
- HDFS多用户管理ACL机制other权限访问控制的理解
- C# 8: 可变结构体中的只读实例成员
- 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)
- 京东:2022年将在全国范围内招聘超两万名高校毕业生
- 50道编程小题目之【判断是一年的第几天】
- python面向对象编程(2)
- [INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突。
- Java基础篇之什么是类集?
- 五、K8s pod相关操作(1)
- java实例 之 商品管理系统
- win10 系统重装后,如何恢复mysql 数据库(mysql-8.0.26-winx64.zip)
- js将docx转换为html,js实现word转换为html
- 心上莲花:佛教简介(上)
- 【用户研究】【实战】——“得到”APP 可用性测试
- 如何编辑运行HTML网页文件(HTML编辑工具使用介绍)
- 图漾深度相机FS820-E1使用
- Java实现扑克牌游戏(简易炸金花)
热门文章
- Centos7 安装向日葵(最新版本)
- JavaScript之 ------ 综合应用
- 前端扑街仔的nginx配置
- CREO:CREO软件新建之草绘(.sec)、零件(.prt)、组件(.asm)、制造(.mfg)、绘图(.drw)、格式(.frm)、报表(.rep)、图表(.dgm)、布局简介、使用方法之详细攻略
- ue4 maya max导入导出旋转坐标轴问题
- ui动效 unity_Unity3D 虚拟现实开发(五)-UI篇
- 十大单身狗最需要的APP
- 反向代理服务器nginx-proxy-manager
- CRecordset::GetRecordCount()
- ffmpeg SDL之纹理