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


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

   项目部分图片

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
现场大屏幕具有开幕墙、闭幕墙、消息墙、抽奖、签到、嘉宾展示、抢红包功能,利用开幕墙对整个活动的展示介绍、也适合活动进行中的间歇时间、消息墙可以再等待和互动的时候,让员工发布消息,是/一款非常流行的微信大屏幕系统。 重要说明:付费报名模式目前只支持开通微信支付的服务号。 1、本模块支持开幕墙、闭幕墙、消息墙、二维码扫描墙、3D签到墙(支持logo签到和文字签到)(4种展示效果)、多奖品切换现场抽奖、酷炫互动疯狂抢红包、嘉宾墙等,后续将再新增多个墙,敬请期待; 2、每个大屏幕都支持自定义背景、和背景有音乐功能,购买的客户将免费赠送背景素材包; 3、现场抽奖奖品支持同时设置多个奖品,并且可以设置每个奖品的顺序,方便根据奖品价值安排抽奖顺序,奖品支持实物和红包(); 4、抢红包奖品支持实物、微信卡券、红包等,支持自定义奖品数量、概率等; 5、抢红包支持设置每个人最多中奖次数、超过了就不会再中奖了; 6、抢红包活动支持设置赞助商广告,粉丝的中奖提示页面会弹出赞助广告; 7、抢红包活动支持多波活动举办,支持一波活动结束后直接重置,之前中奖的数据不会被清空,后台和中奖者手机端都可以看到并且兑换红包。 8、红包奖品支持直接发送和提现两种模式,方便做大额红包奖励。 9、3D签到墙支持4种展示方式,前后台都可以自由切换,手机端签到可以支持是/否要填写个人信息,个人信息支持填写姓名、手机、公司/职位等; 10、大屏幕支持设置密码才能访问的功能; 11、消息墙支持开启是/否要消息审核的功能,支持同时发生消息和图片的功能,并且支持图片再显示的时候是/否自动放大功能。 12、后台支持自定义活动流程说明,方便参与者再手机端直接查看活动流程。 13、支持开启和关闭强制关注才能参与活动的功能; 14、自带LBS限制地区功能,可以设置参与人的地区范围; 15、本模块只支持认证服务号使用(使用红包功能必须开通微信支付),其他非认证服务号的可以借用权限(借用权限的账号无法使用卡券功能); 运营方案推荐: 【公司年会方案】 使用开幕墙、闭幕墙、消息墙、抽奖、签到、嘉宾展示、抢红包功能,利用开幕墙对整个活动的展示介绍、也适合活动进行中的间歇时间、消息墙可以再等待和互动的时候,让员工发布消息。签到墙采用水晶球模式。 整个年会设置多波抢红包活动,利用抢红包重置功能,可以举办多波互动抢红包,既能引爆现场,又能回馈员工福利。 现场抽奖功能可以把奖品依次从低到高设置,把价值最高的放最后面。 【本地自媒体现场活动】 使用开幕墙、闭幕强、抢红包功能,开幕墙和闭幕墙可以做成赞助商广告墙,利用抢红包的高互动功能,并且可以举办多波的功能,快速引爆活动现场。 适用范围 微信墙、超级大屏幕、微信大屏幕、现场大屏幕 1、本地自媒体大号,拉商家赞助; 2、公司年会、学校、企事业单位等等; 3、微信运营服务提供商; 4、婚礼策划机构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值