1.开发背景

之前是做项目一直有一个困扰,就是如何进行及时通讯,本人.Net开发,不太想用别人的接口,然后偶然的机会知道了SignalR,那么什么是SignalR呢?

2.SignalR简介

ASP.NET SignalR是ASP.NET开发人员的库,它简化了向应用程序添加实时Web功能的过程。实时Web功能是指服务器代码在连接的客户端可用时立即将内容推送到连接的客户端,而不是让服务器等待客户端请求新数据。

SignalR可用于向ASP.NET应用程序添加任何类型的“实时”Web功能。虽然聊天经常被用作示例,但您可以做更多的事情。每当用户刷新网页以查看新数据,或者页面实现长轮询以检索新数据时,它都是使用SignalR的候选者。示例包括仪表板和监视应用程序,协作应用程序(如同时编辑文档),作业进度更新和实时表单。

SignalR还支持全新类型的Web应用程序,这些应用程序需要来自服务器的高频更新,例如实时游戏。

SignalR提供了一个简单的API,用于创建从服务器端.NET代码调用客户端浏览器(和其他客户端平台)中的JavaScript函数的服务器到客户端远程过程调用(RPC)。SignalR还包括用于连接管理的API(例如,连接和断开事件)以及分组连接。

详情可以看一下微软的文档介绍,网址为https://www.asp.net/signalr,全英文,但是可以翻译一下。

3.创建一个MVC项目。

具体创建的过程我就不多做介绍了,https://www.asp.net/signalr这里面都有非常详细的介绍,还有一个demo,可以跟着一步一步做。
项目创建好之后,需要先把需要的NuGet包加进来,就是这个SignalR了,

或者在工具》NuGet包管理器》程序包管理控制台输入
install-package Microsoft.AspNet.SignalR

然后需要在添加两个类,一个永久连接类,一个集线器类。你可以在创建一个文件夹用来存放这两个类,或者直接放到App_Start文件下。两个类命名分别为Startup.cs 和 ChatHub.cs如下图所示

 

我是之前添加过,所以直接显示到这里了。第一次添加的话,应该在这里。

添加好这两个类之后,咱们在稍稍做一下修改。打开ChatHub类,修改一下参数,代码为

using System;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChat
{
public class ChatHub : Hub
{
public void Send(string name, string message, string datetime, string receiver)
{
Clients.All.broadcastMessage(name, message, datetime, receiver);
}
}
}

这里四个参数 分别为,发送者姓名,发送消息内容,发送时间,以及接收者。
后台修改完了,接下来看页面,回到Index.cshtml,把原来的页面内容可以删了,样式的话我是参考的layui里面的LayIM。https://www.layui.com/demo/layim.html

 layIM是收费的,所以至于这个页面的样式,只能靠自己了,首先F12,检查元素,看引入了哪几个css和js文件,然后把文件下载下来,然后分析页面样式,看怎么布局,都使用了什么标签,class名为什么,嗯,就这么简单就把样式copy下来了。当然还有一些地方需要自己动手修改。关键地方到了。页面处理好之后,就该写JS了,如何呢点击发送的时候,把消息发送出去呢?先看代码在讲吧。

这里现在需要先引入两个js。

<script src="~/Scripts/jquery.signalR-2.3.0.min.js"></script>
<script src="~/signalr/hubs"></script>

说实话,因为其中一个js,走了不少坑,就是这个hubs,这个文件在项目中是不存在的,只有在项目运行的时候,才会动态生成一个hubs文件,发送消息接收消息js代码如下。

 $(function () {
var datetime = getNowFormatDate();
var chat = $.connection.chatHub;
chat.client.broadcastMessage = function (name, message, datetime, receiver) { //发送人姓名 发送消息内容 发送时间 接收人姓名
var sendname = name;
var encodedMsg = message;
var currentname = $("#name").text();// 当前登录系统的用户
if (receiver == currentname) { //接收人收到的消息
$('#chatarea').append('<li><div class="layim-chat-user"><img src="../Content/img/defaultpic.jpg"><cite>' + sendname + '<i>' + datetime + '</i></cite>
</div><div class="layim-chat-text">' + encodedMsg + '</div></li>');
}
else if (sendname == currentname) {
$('#chatarea').append('<li class="layim-chat-mine"><div class="layim-chat-user"><img src="../Content/img/defaultpic.jpg" /><cite><i>' + datetime + '</i>' + sendname + '</cite></div>
<div class="layim-chat-text">' + encodedMsg + '</div> </li >');
}
// layui.form.render();
};
$.connection.hub.start().done(function () {
$(document).keypress(function (e) {
if (e.keyCode == 13) {
$('#setSend').click();
}
})
$('#setSend').click(function () {
var current_id = $("#current_id").val();
if (current_id == "" || current_id == null) {
alert("请先选择聊天对象");
return false;
}
if ($("#txt_message").val() == "" || $("#txt_message").val() == null) {
alert("请输入聊天内容");
}
else {
chat.server.send($("#name").text(), $("#txt_message").val(), getNowFormatDate(), $("#current_id").val()); //发送人姓名 发送消息内容 发送时间 接收人姓名
setTimeout("$(\"#txt_message\").val('')", 0005); //清空消息输入框
//$("#chatarea").children("div:last-child")[0].scrollIntoView(false);
document.getElementById("msg_end").scrollIntoView(true);
} });
});
});
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}

项目源码地址:https://github.com/ArvinLimeng/WebChat

程序员工具站点:草根工具www.idevtool.com

个人笔记站点:草根笔记note.idevtool.com

用SignalR和Layui搭建自己的web聊天网站的更多相关文章

  1. 使用SignalR构建一个最基本的web聊天室

    What is SignalR ASP.NET SignalR is a new library for ASP.NET developers that simplifies the process ...

  2. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)

    大家好,本篇是接上一篇 ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  ASP.NET SignalR WebIM系列第二篇.本篇会带领大家将 LayIM ...

  3. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(二) 之 ChatServer搭建,连接服务器,以及注意事项。

    上篇:ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取) 上一篇我们已经完成了初步界面的搭建工作,本篇将介绍IM的核心内容 ...

  4. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言

    前端时间听一个技术朋友说 LayIM 2.0 发布了,听到这个消息抓紧去官网看了一下.(http://layim.layui.com/)哎呀呀,还要购买授权[大家支持一下哦],果断买了企业版,喜欢钻研 ...

  5. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(三) 之 实现单聊,群聊,发送图片,文件。

    上篇讲解了如何搭建聊天服务器,以及客户端js怎么和layui的语法配合.服务器已经连接上了,那么聊天还会远吗? 进入正题,正如上一篇提到的我们用 Client.Group(groupId)的方法向客户 ...

  6. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言(内容已过期,阅读请慎重)

    2018-09-19 更新 :现在已经更新ASP.NET Core Middleware版本.对.NET Core SignalR感兴趣的朋友移步:https://github.com/fanpan2 ...

  7. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列

    ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  http://www.cnblogs.com/panzi/p/5742089.html ASP.NET S ...

  8. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(四) 之 用户搜索(Elasticsearch),加好友流程(1)。

    前面几篇基本已经实现了大部分即时通讯功能:聊天,群聊,发送文件,图片,消息.不过这些业务都是比较粗犷的.下面我们就把业务细化,之前用的是死数据,那我们就从加好友开始吧.加好友,首先你得知道你要加谁.L ...

  9. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列(不断更新中)

    项目简介 利用ASP.NET SignalR技术与Layim前端im框架实现的一个简单的web聊天室,包括单聊,群聊,加好友,加群,好友搜索,管理,群组管理,好友权限设置等功能.涉及技术: Elast ...

  10. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室 实战系列。开源啦!!!

    自此系列博客开写以来,好多同学关心开源问题,之前由于网络问题,发布到Github上老是失败,今天终于在精简了好多无用的文件之后发布上去了. 注意:layim源代码并不开源,由于版权问题,请大家去官网了 ...

随机推荐

  1. golang配置读取值viper

    viper简介 Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序.它旨在在应用程序中工作,并且可以处理所有类型的配置需求和格式.它支持: 设置默认值 从JSON.TOML.Y ...

  2. Jx.Cms开发笔记(三)-Views主题动态切换

    效果展示 我们可以在后台动态切换主题 目前Jx.Cms有两个主题,其中一个是默认主题,另一个是仿的Blogs主题. 我们可以通过点击启用按钮来动态切换两个主题. 实现方法 首先写一个实现IViewLo ...

  3. SaaS架构中多租户的概念

    SaaS架构中多租户的概念 租户可以理解为部署在云端的客户,通常出现在2B的企业中,比如现在学校的一卡通管理,通常是一个公司来做的,学校本地不需要做任何部署,而这个公司又是服务了很多个学校,那么学校对 ...

  4. docker安装Nginx并运行vue3前端

    Docker安装Nginx #获取Nginx docker pull nginx #查端口 netstat -ntlp #建本地目录 mkdir -p /home/nginx/www /home/ng ...

  5. Flutter 滑动组件互相嵌套问题

    滑动组件互相嵌套问题 如果listview/singlechildscrollview 嵌套gridview,将两个组件的shrinkwrap设置为true,并且gridview无法滚动 physic ...

  6. WCF Bindings Needed For HTTPS

    原文地址:https://weblogs.asp.net/srkirkland/wcf-bindings-needed-for-https 我刚刚完成了我的第一个 WCF 应用,它在我的开发机上顺利工 ...

  7. 权限控制(acl,rbac)

    目录 一.权限控制(acl,rbac) 一.权限控制(acl,rbac) 将来我们编写的项目主要分成两类:公司内部项目和互联网项目 公司内部项目 使用RBAC-基于角色的访问控制 什么是RBAC? R ...

  8. 自用Idea内存配置

    自用Idea内存配置 如下: 使用了zgc,自用48g内存的mac.可以应对8后端4前端同时使用. -Xms1g -Xmx12g -XX:+UseLargePages -XstartOnFirstTh ...

  9. 该怎么解决no route to host

    出现No route to host 的时候,有如下几种可能: 1.对方的域名确实不通 2.本机自己开了防火墙 3.本机的etc/hosts 里面没有配置本机的机器名和ip (可能性最大) 其中第三点 ...

  10. Spring Boot整合Thrift RPC

    [转载] https://coder4.com/homs_online/spring-boot/sb-thrift.html Spring Boot自动配置简介 在介绍RPC之前,我们先来学习下Spr ...