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. Limit线段树题单题解(更新中)

    P3373 线段树模板 2 \(1 \leq n \leq 10^5\) 题解:考查标记与标记的合并 我们考虑打两个懒惰标记实现区间乘和区间加 线段树维护区间和 对于信息与信息的合并:左儿子加上右儿子 ...

  2. PYENV安装与使用

    1.概述 pyenv 是一个python的版本管理软件,通过他,我们可以 方便的安装python 的版本,切换版本,解决版本不同带来问题. 2.安装pyenv 我们可以通过链接下载pyenv http ...

  3. spring 使用异步任务

    1.说明 在springboot 中使用 @Async 实现异步任务处理,下面介绍一下如何实现这个. 2.实现代码 2.1 增加@EnableAsync @EnableAsync public cla ...

  4. kettle 简单使用

    概要 KETTLE 是一个ETL工具,它可以在不同的数据源之间进行数据的抽取转换.下面简单介绍一下他是如何使用的. 下载 https://nchc.dl.sourceforge.net/project ...

  5. canvas(一)描边与填充

    1.画布大小 canvas默认的大小是 300*150,通过操作width/height属性可以设置画布的大小,属性值只能是具体是像素值,而不能是百分比. <body> <div c ...

  6. 渗透测试-前端验签绕过之SHA256+RSA

    本文是高级前端加解密与验签实战的第2篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过SHA256+RSA签名来爆破登录. 绕过 根据提示可以看出这次签名用了SHA2 ...

  7. IOS 越狱

    iOS越狱 palera1n palera1n工具支持iOS 15.0 - 16.4.1版本的越狱 支持设备,最高支持到A11芯片 iPhone 8.8P.X iPad 5 .6.7,iPad Pro ...

  8. IOS多线程之NSOperation(2)

    IOS多线程之NSOperation(2) 最大并发数 open var maxConcurrentOperationCount: Int 并发数就是同时执行的任务数.比如,同时开3个线程执行3个任务 ...

  9. Spark面试题汇总及答案(推荐收藏)

    一.面试题 Spark 通常来说,Spark与MapReduce相比,Spark运行效率更高.请说明效率更高来源于Spark内置的哪些机制? hadoop和spark使用场景? spark如何保证宕机 ...

  10. 9.24java wab实现创建新界面验证码

    <!DOCTYPE html> <html> <head> <title>User Login</title> <style> ...