本系列主要开发客服聊天系统的总结。

基于.Net Core2.2 +SignalR+Layui实现的人对人聊天功能

SignalR简介

SignalR是一个.Net Core/.Net Framework的开源框架,实现了客户端和服务器端实时通讯。封装了WebSocket,ForeverFrame,ServerSentEvents,LongPolling四种主要的传输协议,让浏览器自行选择兼容的版本,解决了webSocket兼容性问题。

 
页面效果:
PC端:前端样式采用的Layui,后端用的.net Core 2.2框架。主要功能包括:聊天客户列表,一对一聊天(文字/图片),新消息提醒,聊天记录保存等功能。

移动App:基于Vue和Vant组件库,主要功能包括客服列表,聊天列表,在线聊天功能

1.使用模板新建一个.net core2.2的web项目

2.建立一个SignalrHubs,继承于Hub。
Hub基于永久连接之上更高层的封装,允许客户端和服务器端自定义方法并相互调用

 public class SignalrHubs : Hub
{
private readonly IRepository<Frame_User> _repository;
//构造器
public SignalrHubs(IRepository<Frame_User> repository )
{
_repository = repository; }
//给客服发送消息
public async Task TalkToCaller(string callerid, string clienterid, string message)
{
//保存聊天记录
AddChatHistory(callerid, clienterid, message, false);
//给对应客服发送消息
await Clients.User(callerid).SendAsync("ReceiveMessage", callerid, clienterid, message, "NickName",DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
}

3.配置SignalR

在Startup中注册SignalR

 //ConfigureServices
services.AddSignalR(huboptions =>
{
//显示服务器错误的详细信息
huboptions.EnableDetailedErrors = true;
//间隔时长 1分钟
//huboptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
//Configure
app.UseSignalR(routes =>
{
routes.MapHub<SignalrHubs>("/api/SignalrHubs"); });

4.建立连接,发送和接收消息

 <script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/SingnlR/signalr.js"></script>
<script type="text/javascript">
var hostUrl = "http://localhost:3090";
const connection = new signalR.HubConnectionBuilder().withUrl(
hostUrl+"/api/SignalrHubs?userid="+userid).build();
$(function () { //建立连接
connection.start().catch(err => console.error(err.toString()));
//接收客户消息
connection.on("ReceiveMessage", (callerid, clientid, message,clientname,sendtime) => {
//提示音播放
playSound();
//更新用户信息
var picurl=UpdateUser(clientid);
//更新左侧客户最新聊天记录
UpClientTopContent(clientid, message, clientname, sendtime, picurl);
//更新右侧聊天明细
AppendContent(clientid, message,0);
});
//发送消息
$(".FaSong").click(function () {
if (chooseuserid == "") {
layer.msg('请选择客户!');
return;
}
var text = $(".text").val();
if (text == "") {
layer.msg('请输入消息!');
return;
}
//更新右侧聊天明细
AddContentChat(chooseuserid, text);
}); });
</script>

.Net Core SignalR+LayUi(1)-简单入门的更多相关文章

  1. SignalR 2.1 简单入门项目

    概述 SignalR是通讯框架,前台Web页面与后台服务实现数据的交互.ASP.NET SignalR 是一个为 ASP.NET 开发人员的库,简化了将实时 web 功能添加到应用程序的过程.实时We ...

  2. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  3. .NET Core 学习资料精选:入门

    开源跨平台的.NET Core,还没上车的赶紧的,来不及解释了-- 本系列文章,主要分享一些.NET Core比较优秀的社区资料和微软官方资料.我进行了知识点归类,让大家可以更清晰的学习.NET Co ...

  4. 在.Net Core中使用MongoDB的入门教程(一)

    首先,我们在MongoDB的官方文档中看到,MongoDb的2.4以上的For .Net的驱动是支持.Net Core 2.0的. 所以,在我们安装好了MangoDB后,就可以开始MangoDB的.N ...

  5. .net core使用Ku.Core.Extensions.Layui实现layui表单渲染

    演示网站地址:http://layui.kulend.com/项目地址:https://github.com/kulend/Ku.Core.Extensions/tree/master/Ku.Core ...

  6. ASP.NET Core SignalR中的流式传输

    什么是流式传输? 流式传输是这一种以稳定持续流的形式传输数据的技术. 流式传输的使用场景 有些场景中,服务器返回的数据量较大,等待时间较长,客户端不得不等待服务器返回所有数据后,再进行相应的操作.这时 ...

  7. Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参

    继续学习 最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记,在使用过程中稍微看了下它的源码,不得不 ...

  8. Net Core SignalR 测试,可以用于unity、Layair、白鹭引擎、大数据分析平台等高可用消息实时通信器。

    SignalR介绍 SignalR介绍来源于微软文档,不过多解释.https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?v ...

  9. LayIM.AspNetCore Middleware 开发日记(七)Asp.Net.Core.SignalR闪亮登场

    前言   前几篇介绍了整个中间件的构成,路由,基本配置等等.基本上没有涉及到通讯部分.不过已经实现了融云的通讯功能,由于是第三方的就不在单独去写.正好.NET Core SignalR已经出来好久了, ...

随机推荐

  1. 记住:永远不要在 MySQL 中使用 UTF-8

    阅读本文大概需要 3.6 分钟. 译文:http://suo.im/4zBuvs 来自:http://ju.outofmemory.cn 最近我遇到了一个bug,我试着通过Rails在以“utf8”编 ...

  2. python gaussian,gaussian2

    import numpy as np import matplotlib.pyplot as plt import mpl_toolkits.axisartist as axisartist from ...

  3. 【Docker】容器与系统时间同步

    宿主机时间 [root@slave-1 ~]# date Fri May 12 11:20:30 CST 2017 容器时间 [root@slave-1 ~]# docker exec -ti 879 ...

  4. spring mvc aop拦截controller层获取RequestBody反序列化后参数

    最近,为了解耦,把一逻辑从interceptor抽出来,放在aop中处理,需要得到RequestBody.如下: @Aspect @Configuration public class CheckAs ...

  5. 配置IDEA项目JDK环境

    打开IDEA,然后点击[Configure]->[Project Defaults]->[Project Structure],如下图:  然后左侧点击树形菜单的[Project Sett ...

  6. 关于使用sudo找不到环境变量的问题

    参考这里:https://www.cnblogs.com/zhongshiqiang/p/10839666.html 使用sudo -E 保留当前用户环境,这时就不会存在找不到环境变量的问题了.

  7. roboware 常见操作和问题

    博客参考:https://blog.csdn.net/u013528298/article/details/88052470 1. build中错误位置定位方式 按住“CTRL”键并点击错误提示的链接 ...

  8. 【454】ML-DL相关链接

    GD(梯度下降)和SGD(随机梯度下降) 机器学习中的Bias和Variance 机器学习之判别式模型和生成式模型 笔记 | 什么是Cross Entropy

  9. Elasticsearch探索之路的障碍

    1.   unable to install syscall filter 解决方法: 这个警告主要输因为使用的linux版本过低造成的    暂时不用理会

  10. linux默认的2.7升级到3.7版本

    CentOS7中自带的python版本是python-2.7.5,由于新开的虚拟机需要使用python3,于是便升级一下版本. 安装Python3.7.3 官网下载地址:https://www.pyt ...