千家信息网

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

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,signalR+redis分布式聊天服务器是如何搭建,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。最近在搞一个直播项目需要聊天服务器,之
千家信息网最后更新 2025年11月07日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类

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 类

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

}

后端就算完成了。

第四步:前端页面的创建






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

***我说一下 这个东西是自动生成的,你也可以手动指定,我还是把代码贴出来吧。你也可以F12自己去看。

/*!
* ASP.NET SignalR JavaScript Library v2.2.1
* http://signalr.net/
*
* Copyright (c) .NET Foundation. All rights reserved.
* Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
*
*/

///
///
(function ($, window, undefined) {
///
"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分布式聊天服务器是如何搭建的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

服务器 服务 分布式 代码 内容 地址 情况 方法 更多 版本 篇文章 还是 问题 项目 开发 不同 尴尬 束手无策 为此 一句话 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络技术行业职业环境分析 服务器内存插槽颜色 为什么学习网络技术还要学编程 全国各地小姐数据库 数据库正常 报表报错 游戏软件开发项目技术编制要点 中华人民共和国网络安全法做题 考勤系统软件开发需求 如何监控企业网络安全 开源文件服务器部署 定制软件开发的分类 绿色征途找回服务器 服务器显网络连接失败 丰台区运营网络技术咨询概况 新华互联网科技央视 网络安全周答题秘诀 电视网络连不上服务器怎么办 手机远程下载数据库用什么技术 广州路客互联网科技有限公司 苹果云端服务器 网络安全产业框架图解 不安全的前沿数据库怎么挖 广东有网络安全专业吗 绿色征途找回服务器 扬州游戏软件开发项目 复方维生素u片药品广告数据库 数据库管理系统sql的调试 badusb网络安全教程 代表互联网科技的符号 社区网络安全活动安排
0