返回顶部
首页 > 资讯 > 服务器 >signalR+redis分布式聊天服务器是如何搭建
  • 560
分享到

signalR+redis分布式聊天服务器是如何搭建

2023-06-17 04:06:05 560人浏览 八月长安
摘要

signalR+redis分布式聊天服务器是如何搭建,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最近在搞一个直播项目需要聊天服务器,之前是以小打小闹来做的,并没有想太多就只有

signalR+redis分布式聊天服务器是如何搭建,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

最近在搞一个直播项目需要聊天服务器,之前是以小打小闹来做的,并没有想太多就只有一台服务器。前几天一下子突然来了5000人,服务器瞬间gg,作为开发人员的我很尴尬! 这就是我们这篇文章的背景。

  我使用的是C# mvc4.0 来开发的,这里还需要一个Redis 至于你是windows版本还是linux版本我就不管了,反正是要有个地址一个端口,密码根据实际情况填写。

  我这里用一个demo来展现分布式的情况https://git.oschina.net/908Sharp/signalR-multi-Server.git

  第一步:新建两mvc项目

  从nuget 中添加以下几个包

Install-Package Microsoft.AspNet.SignalR

Install-Package Microsoft.AspNet.SignalR.Redis

install-package Microsoft.Owin.Cors

  第二步:在App_Start目录中添加Owin StartUp类

signalR+redis分布式聊天服务器是如何搭建

  public void Configuration(IAppBuilder app)
        {
            GlobalHost.DependencyResolver.UseRedis("127.0.0.1", 6379, string.Empty, "SignalRBus");
            app.Map("/signalr", map =>
            {
                map.UseCors(CorsOptions.AllowAll);

              var hubConfiguration = new HubConfiguration
                {
                    EnableJSONP = true
                };
                map.RunSignalR(hubConfiguration);
            });
        }

注意引用的包啊,骚年们。

  第三步:添加ChatHub 类

signalR+redis分布式聊天服务器是如何搭建

  [HubName("chat")]
    public class ChatHub:Hub
    { 
        public void Chat(string msg)
        {
            Clients.All.Display("Receive Msg:" + msg);
        }

}

后端就算完成了。

  第四步:前端页面的创建

signalR+redis分布式聊天服务器是如何搭建

<div id="chat-content"></div>
<input type="text" id="msg" name="name" value="" placeholder="请输入聊天内容"/>
<input type="button" id="btn" name="name" value="发送" />
<script src="/Scripts/Jquery-1.10.2.min.js"></script>
<script src="/Scripts/jquery.signalR-2.2.1.js"></script>
<script src="/Scripts/hub.js"></script>

<script>
   
    conn = $.hubConnection();
    conn.qs = {
    };
    conn.start().done(function () {
        console.log('signalr  success');
        $('#btn').click(function () {
            var msg = $('#msg').val();
            chat.invoke("Chat", msg)
                .done(function () {
                    console.log('signalr send success');
                    $('#msg').val('');
                })
                .fail(function (e) {
                    console.log('signalr send fail');
                });
        })
    });
    chat = conn.createHubProxy("chat");
    chat.on("Display", function (msg) {
        $('#chat-content').html($('#chat-content').html() + '<br/>' + msg)
    });
</script>

记住我上面说的demo是两个站哦,代码都一样的,正式环境的时候我们肯定是一份代码在不同服务器上部署,指向同一个redis地址

***我说一下<script src="/Scripts/hub.js"></script> 这个东西是自动生成的,你也可以手动指定,我还是把代码贴出来吧。你也可以F12自己去看。

/// <reference path="..\..\SignalR.Client.JS\Scripts\jquery-1.6.4.js" />
/// <reference path="jquery.signalR.js" />
(function ($, window, undefined) {
    /// <param name="$" type="jQuery" />
    "use strict";

  if (typeof ($.signalR) !== "function") {
        throw new  Error("SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js  is referenced before ~/signalr/js.");
    }

  var signalR = $.signalR;

  function makeProxyCallback(hub, callback) {
        return function () {
            // Call the client hub method
            callback.apply(hub, $.makeArray(arguments));
        };
    }

  function reGISterHubProxies(instance, shouldSubscribe) {
        var key, hub, memberKey, memberValue, subscriptionMethod;

      for (key in instance) {
            if (instance.hasOwnProperty(key)) {
                hub = instance[key];

              if (!(hub.hubName)) {
                    // Not a client hub
                    continue;
                }

              if (shouldSubscribe) {
                    // We want to subscribe to the hub events
                    subscriptionMethod = hub.on;
                } else {
                    // We want to unsubscribe from the hub events
                    subscriptionMethod = hub.off;
                }

              // Loop through all members on the hub and find client hub functions to subscribe/unsubscribe
                for (memberKey in hub.client) {
                    if (hub.client.hasOwnProperty(memberKey)) {
                        memberValue = hub.client[memberKey];

                      if (!$.isFunction(memberValue)) {
                            // Not a client hub function
                            continue;
                        }

                      subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue));
                    }
                }
            }
        }
    }

  $.hubConnection.prototype.createHubProxies = function () {
        var proxies = {};
        this.starting(function () {
            // Register the hub proxies as subscribed
            // (instance, shouldSubscribe)
            registerHubProxies(proxies, true);

          this._registerSubscribedHubs();
        }).disconnected(function () {
            // Unsubscribe all hub proxies when we "disconnect".  This  is to ensure that we do not re-add functional call backs.
            // (instance, shouldSubscribe)
            registerHubProxies(proxies, false);
        });

      proxies['chat'] = this.createHubProxy('chat');
        proxies['chat'].client = {};
        proxies['chat'].server = {
            send: function (message) {
                return proxies['chat'].invoke.apply(proxies['chat'], $.merge(["send"], $.makeArray(arguments)));
            },

          sendOne: function (toUserId, message) {
                return proxies['chat'].invoke.apply(proxies['chat'], $.merge(["sendOne"], $.makeArray(arguments)));
            }
        };

      return proxies;
    };

  signalR.hub = $.hubConnection("/signalr", { useDefaultPath: false });
    $.extend(signalR, signalR.hub.createHubProxies());

}(window.jQuery, window));

signalR+redis分布式聊天服务器是如何搭建

这一块是你要是想指定具体路径也是可以的哦,但是要在后台写这么一句话

signalR+redis分布式聊天服务器是如何搭建

看完上述内容,你们掌握signalR+redis分布式聊天服务器是如何搭建的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网服务器频道,感谢各位的阅读!

--结束END--

本文标题: signalR+redis分布式聊天服务器是如何搭建

本文链接: https://lsjlt.com/news/287085.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • signalR+redis分布式聊天服务器是如何搭建
    signalR+redis分布式聊天服务器是如何搭建,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最近在搞一个直播项目需要聊天服务器,之前是以小打小闹来做的,并没有想太多就只有...
    99+
    2023-06-17
  • 如何用Eureka + Feign搭建分布式微服务
    目录EurekaFeign创建父项目注册中心主要依赖配置文件主类服务提供者主要依赖配置文件主类及Controller客户端主要依赖配置文件主类、Controller及Feign映射E...
    99+
    2024-04-02
  • 用阿里云服务器搭建聊天室
    本文将详细介绍如何使用阿里云服务器来搭建一个聊天室。阿里云服务器提供了丰富的API和工具,可以帮助我们轻松地构建和管理服务器。通过本教程,你可以了解如何利用阿里云服务器来搭建一个功能完善的聊天室。 搭建聊天室的第一步是选择阿里云服务器。阿里...
    99+
    2023-11-21
    阿里 聊天室 服务器
  • hadoop伪分布式如何搭建
    要搭建Hadoop伪分布式,需要按照以下步骤进行操作:1. 安装Java开发工具:首先,确保已在计算机上安装了Java开发工具。Ha...
    99+
    2023-09-21
    hadoop
  • linux分布式服务器搭建的步骤是什么
    搭建Linux分布式服务器的步骤如下: 选择合适的Linux发行版:首先选择一个适合用于分布式服务器的Linux发行版,如Ubu...
    99+
    2024-04-09
    linux 服务器
  • 阿里云服务器怎么搭建聊天室呢
    简介 在互联网时代,聊天室作为一种实时交流的工具,受到了广泛的应用。而阿里云服务器作为国内领先的云计算服务提供商,提供了强大的计算能力和稳定的网络环境,非常适合搭建聊天室。本文将介绍如何利用阿里云服务器搭建一个功能完善的聊天室。步骤一:选择...
    99+
    2024-01-29
    阿里 聊天室 服务器
  • 基于Python如何使用AIML搭建聊天机器人
    借助 Python 的 AIML 包,我们很容易实现人工智能聊天机器人。AIML,全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言...
    99+
    2022-06-04
    如何使用 机器人 Python
  • Redis分布式锁是如何实现的
    Redis分布式锁是通过在Redis中使用SETNX命令来实现的。SETNX命令用于将一个键的值设置为指定的字符串,只有当键不存在时...
    99+
    2024-04-02
  • 如何进行HA分布式集群搭建
    今天就跟大家聊聊有关如何进行HA分布式集群搭建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一:HA分布式配置的优势:  1,防止由于一台namenode挂掉,集群失败的情形  2,...
    99+
    2023-06-03
  • Ubuntu上如何搭建基于webrtc的多人视频聊天服务
    这篇文章主要讲解了“Ubuntu上如何搭建基于webrtc的多人视频聊天服务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Ubuntu上如何搭建基于webrtc的多人视频聊天服务”吧!web...
    99+
    2023-07-04
  • 怎么用开源框架Matrix-Dendrite搭建聊天服务器
    这篇“怎么用开源框架Matrix-Dendrite搭建聊天服务器”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用开源框架...
    99+
    2023-06-29
  • Apache和Python:如何搭建分布式文件系统?
    随着数据量的不断增加,传统的单机文件系统已经无法满足我们的需求。为了解决这个问题,分布式文件系统应运而生。分布式文件系统通过将数据存储在多个节点上,并允许多个用户同时访问这些数据,实现了高可用性和可伸缩性。在本文中,我们将介绍如何使用Ap...
    99+
    2023-07-31
    apache 文件 分布式
  • 搭建Redis服务器步骤是什么
    本篇文章给大家分享的是有关搭建Redis服务器步骤是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。安装Redis我的安装包在tar -zxvf redi...
    99+
    2023-06-22
  • redis如何实现分布式定时任务
    Redis本身并不直接支持分布式定时任务的功能,但可以通过Redis的一些特性和与其他组件的结合来实现分布式定时任务。一种常见的实现...
    99+
    2023-09-06
    redis
  • 如何在Redis中实现分布式事务
    在Redis中实现分布式事务可以通过使用 Redis 的事务机制 MULTI/EXEC 和 WATCH 命令来实现。以下是实现分布式...
    99+
    2024-04-09
    Redis
  • 开源框架 Matrix-Dendrite 搭建聊天服务器的详细过程
    目录开源框架Matrix-Dendrite搭建聊天服务器关于Matrix开始搭建需要准备的'东西'PostgreSQL01.创建PostgreSQL配置文件目录02....
    99+
    2024-04-02
  • 怎么使用Docker镜像搭建分布式文件服务器
    本篇内容介绍了“怎么使用Docker镜像搭建分布式文件服务器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • Java微服务分布式调度Elastic-job环境如何搭建及配置
    今天小编给大家分享一下Java微服务分布式调度Elastic-job环境如何搭建及配置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-05
  • 如何使用Docker Swarm搭建分布式爬虫集群
    今天小编给大家分享一下如何使用Docker Swarm搭建分布式爬虫集群的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获...
    99+
    2024-04-02
  • 如何搭建文件分享服务器?
    ...
    99+
    2019-04-16
    如何搭建文件分享服务器?
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作