IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 用signalr实现简单的网页实时聊天 -> 正文阅读

[JavaScript知识库]用signalr实现简单的网页实时聊天

开发工具与关键技术: js

作者:GuanLW

撰写时间:2022/3/18

第一步:先在vs的NuGet包中下载安装Microsoft.AspNet.SignalR。安装完成后会多以下几个文件

?

第二步:右键项目->新建项,选择signalr集线器类,并写入代码,namespace与类名记得改成实际类名

如下:

using Microsoft.AspNet.SignalR;

using Microsoft.AspNet.SignalR.Hubs;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;



namespace webLoans

{

??? [HubName("msgHub")]//客户端调用,首字母要小写

??? public class MsgHub : Hub

??? {

??????? //在hub中编写的方法,都是要被客户端调用的方法

??????? [HubMethodName("sendMsg")]//客户端调用,首字母要小写

??????? public void SendMsg(string name, string txt)

??????? {

??????????? //服务器主动调用客户端的方法,即客户端必须有getMsg方法

??????????? Clients.All.getMsg(name, txt);

??????? }

??? }

}

第三步:右键项目,新建普通类Startup.cs

如下:

using Microsoft.Owin;

using Owin;

using System;

using System.Threading.Tasks;



[assembly: OwinStartup(typeof(webLoans.Startup))]



namespace webLoans

{

??? public class Startup

??? {

??????? public void Configuration(IAppBuilder app)

??????? {

??????????? // 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888

??????????? app.MapSignalR();

??????? }

??? }

}

这时可以先测试一下,运行项目,在网页中输入地址https://localhost:44340/signalr/hubs,注意填入实际端口号。网页显示部分内容如下:

第四步:编写html页面,代码如下:

@{

??? Layout = null;

}



<!DOCTYPE html>



<html>

<head>

??? <meta charset="utf-8" />

??? <title></title>

??? <script src="~/Scripts/jquery-1.6.4.js"></script>//实际的路径

??? <script src="~/Scripts/jquery.signalR-2.4.3.js"></script>//实际的路径

??? <script src="/signalr/hubs"></script>//动态生成的

??? <script>

??????? //绑定登录按钮的事件

??????? $(function () {

??????????? $("#btnLogin").click(function () {

??????????????? login();

??????????? });



??????? });



??????? function login() {

??????????? if ($("#txtName").val().length > 0)

??????????????? sessionStorage.setItem("user", $("#txtName").val());

??????????? else {

??????????????? alert("登录失败");

??????????????? return;

??????????? }

??????????? $("#sendBtn").removeAttr("disabled");

??????????? serverClient();

??????? }



??????? //服务器连接操作

??????? function serverClient() {

??????????? //注册服务器连接

??????????? var msgHub = $.connection.msgHub;

??????????? //2.给客户端注册方法,被服务器调用的方法,

??????????? //服务器主动调用给txt内容,客户端被动接收

??????????? //接收到之后做什么

??????????? msgHub.client.getMsg = function (name, txt) {

??????????????? //var txtTemplate = "<div><span>{{name}}</span>:<span>{{content}}</span></div> ";

??????????????? //var html = txtTemplate.replace('{{name}}', name).replace('{{content}}', txt);

??? ????????????//$("#msgList").append(html);

??????????????? var txtHtml = '<li><strong>' + htmlEncode(name)

??????????????????? + '</strong>: ' + htmlEncode(txt) + '</li>';

??????????????? $("#msgList").append(txtHtml);

??????????????? //alert(txt);

??????????? }



??????????? //3.启动连接并绑定处理事件

??????????? $.connection.hub.start().done(function () {



??????????????? $("#sendBtn").click(function () {

??????????????????? msgHub.server.sendMsg(sessionStorage.getItem("user"), $("#txtMsg").val());

??????????????????? $('#txtMsg').val('').focus();

??????????????? })

??????????? }).fail(function () {



??????????? });

??????? }



??????? // 将发来的信息转化为html标签以便添加到页面

??????? function htmlEncode(value) {

??????????? var encodedValue = $('<div />').text(value).html();

??????????? return encodedValue;

??????? }



??? </script>

</head>

<body>

??? <div id="msgList">



??? </div>

??? <input type="text" id="txtName" name="name" value="" />

??? <button id="btnLogin">登录</button>

??? <input type="text" id="txtMsg" name="name" value="" />

??? <button id="sendBtn" disabled="disabled">发送消息</button>



</body>

</html>

注意头部引用的脚本,前两个是你的项目中的实际脚本文件,最后一个是在运行时动态生成的,实际使用时需要修改前两个。

第五步:打开两个网页进行测试,效果如下:

先输入登录名,然后发送信息即可。可以实时聊天。

这是我所学到的一些知识,在此分享给大家,希望可以帮助到你们。

以上就是我的分享,新手上道,请多多指教。如果有更好的方法或不懂得地方欢迎在评论区教导和提问喔!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:40:43  更:2022-03-21 20:45:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:49:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码