当时这个项目是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做的,下次有时间在写。

项目部分图片

微信互动大屏 霸屏 抢红包 源码及所需技术相关推荐

  1. 最新微信合成大西瓜小游戏(合成版)源码+附带流量主功能

    正文: 这是一款云开发版的合成大西瓜小游戏微信小程序源码,微信游戏小程序源码. 该小游戏玩法简单,只需要拖动同样的水果落下合成新品众的水果,最终合成大西瓜,玩法酷似俄罗斯方块,相当于换一种形式的俄罗斯 ...

  2. 抖音账号矩阵同步分发系统,抖音霸屏系统/seo系统源码。

    前言:抖音账号矩阵同步分发系统,抖音霸屏系统/seo系统源码.来做到抖音seo优化达到账号排名效果,关键词起到至关重要的作用,依托于抖音平台的正规权限.所在抖音开放者平台申请的的接口来做真正合规的产品 ...

  3. php表白树洞怎么写,最新微信树洞炫彩版表白墙源码源码分享,七夕情人节互动表白留言墙PHP源码,兼容SAE...

    8月份最新微信树洞炫彩版表白墙源码源码分享,七夕情人节互动表白留言墙PHP源码,完美兼容SAE! 程序特点: 1.php代码,完美兼容Sae,PHP空间 2.漂亮的扁平化界面,当前最流行. 3.发布选 ...

  4. 【湍流】基于matlab kolmogorov结合次谐波补偿大气湍流相位屏【含Matlab源码 2178期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[湍流]基于matlab kolmogorov结合次谐波补偿大气湍流相位屏[含Matlab源码 2178期] 点击上面蓝色字体,直接付费下载 ...

  5. 抢红包 html 模板,微信抢红包源码和模拟demo

    微信抢红包源码和模拟demo 资源下载此资源下载价格为3D币,请先登录 资源文件列表 K_wechat/.classpath , 475 K_wechat/.project , 844 K_wecha ...

  6. Windows CE/Moblie截屏工具及实现源码

    Windows CE/Moblie截屏工具及实现源码 [img]http://dl2.iteye.com/upload/attachment/0084/6997/c72941f2-b86e-3683- ...

  7. Android 录屏服务使用(源码)

    Android 录屏服务使用(源码) 从Android 5.0开始,可以对手机进行录屏,使用场景:如错误场景的视频上传,简单屏幕获取等,下面贴出使用用例和对使用的类一个简单的介绍 - MediaPro ...

  8. 基于JAVA智慧公寓系统演示录屏2021计算机毕业设计源码+系统+lw文档+部署

    基于JAVA智慧公寓系统演示录屏2021计算机毕业设计源码+系统+lw文档+部署 基于JAVA智慧公寓系统演示录屏2021计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 ...

  9. 快捷键自动截屏保存图片工具附源码0积分共享

    快捷键自动截图保存在工具所在目录,目前快捷键复用的原来的截屏软件,不影响原来截屏键功能.源码公开可免费下载需要者自取,可以根据需要自行修改.用对话框实现的,但是做成了系统托盘图标,没有界面显示,方便后 ...

最新文章

  1. 终于要揭开神秘面纱?Magic Leap将要展示产品
  2. 阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,为用户提供基于开源 OLTP、OLAP、BigData 生态的一站式解决方案...
  3. 小企业是否能用得上ITIL?
  4. HDFS多用户管理ACL机制other权限访问控制的理解
  5. C# 8: 可变结构体中的只读实例成员
  6. 详解mysql数据库的启动与终止_详解MySQL数据库的启动与终止(一)
  7. 京东:2022年将在全国范围内招聘超两万名高校毕业生
  8. 50道编程小题目之【判断是一年的第几天】
  9. python面向对象编程(2)
  10. [INS-32025] 所选安装与指定 Oracle 主目录中已安装的软件冲突。
  11. Java基础篇之什么是类集?
  12. 五、K8s pod相关操作(1)
  13. java实例 之 商品管理系统
  14. win10 系统重装后,如何恢复mysql 数据库(mysql-8.0.26-winx64.zip)
  15. js将docx转换为html,js实现word转换为html
  16. 心上莲花:佛教简介(上)
  17. 【用户研究】【实战】——“得到”APP 可用性测试
  18. 如何编辑运行HTML网页文件(HTML编辑工具使用介绍)
  19. 图漾深度相机FS820-E1使用
  20. Java实现扑克牌游戏(简易炸金花)

热门文章

  1. Centos7 安装向日葵(最新版本)
  2. JavaScript之 ------ 综合应用
  3. 前端扑街仔的nginx配置
  4. CREO:CREO软件新建之草绘(.sec)、零件(.prt)、组件(.asm)、制造(.mfg)、绘图(.drw)、格式(.frm)、报表(.rep)、图表(.dgm)、布局简介、使用方法之详细攻略
  5. ue4 maya max导入导出旋转坐标轴问题
  6. ui动效 unity_Unity3D 虚拟现实开发(五)-UI篇
  7. 十大单身狗最需要的APP
  8. 反向代理服务器nginx-proxy-manager
  9. CRecordset::GetRecordCount()
  10. ffmpeg SDL之纹理