使用通用websocket连接asp.net core signalr

一、背景介绍

signalr的功能很强大,可以为我们实现websocket服务端节省不少的时间。但是可能由于不同的环境,我们在对接前端的时候总会很麻烦。虽然微软为我们提供了前端的包,但是总有一些不能用的地方。

首先我们要知道 signalr在进行websocket 连接的时候都做了什么

1.首先请求接口获取connectionId 这个我们待会要用到 我们用post请求 http://localhost:5000/chatHub/negotiate,这里chatHub是我们startup中的名称



 2.接下来就是连接websocket了,这里我用的是uniapp里面的方法,用原生方法也是一样的,知道怎么连的就行了

 ```

  this.token = res.data.connectionId

  uni.connectSocket({

	url: 'ws://192.168.1.211:5000/chatHub?id=' + _this.token,

	method: 'GET',

	success: function() {}

	});

  uni.onSocketOpen(function(res) {
// 连接后发送协议 {"protocol":"json", "version":1}
// 这里注意signalr发送的消息以 0x1e 分割和结尾 _this.sendSocketMessage(`{"protocol":"json", "version":1}${String.fromCharCode(0x1e)}`) console.log('WebSocket连接已打开!'); }); uni.onSocketMessage(function(res) {
//接收数据
let msg = res.data.split(String.fromCharCode(0x1e)); //处理数据
for (let item in msg) {
if (msg[item]) {
let a = JSON.parse(msg[item])
if (a.type === 1) {
var ajson = { //前端定义一个方法 供后端调用,并传入参数
"Show": _this.Show(...a.arguments)
} //target表示要调用的方法
ajson[a.target];
}
}
}
});
//定义show方法
Show(...arg) {
this.list.push({
ss: arguments[0],
con: arguments[1]
});
uni.setStorageSync('1',this.list) this.value = '';
},
//
sendSocketMessage: function(msg) {
if (true) { //这里要判断一下连接是否打开,我这里是随便写的,也完全没有做任何封装,需要的自己封装一下
uni.sendSocketMessage({
data: msg,
fail(res) {
//console.log(123) }
});
} else { }
},
handle(){
//发送消息 arguments 调用后端方法的参数,target 要调用的后端的目标函数的名称 最后加上结束符
this.sendSocketMessage(
`${JSON.stringify({"arguments":[this.user,this.value],"invocationId":"0","streamIds":[],"target":"SendMsg","type": 1})}${String.fromCharCode(0x1e)}`
)
} ```

使用websocket连接(对接)asp.net core signalr的更多相关文章

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

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

  2. Asp.Net Core SignalR 与微信小程序交互笔记

    什么是Asp.Net Core SignalR Asp.Net Core SignalR 是微软开发的一套基于Asp.Net Core的与Web进行实时交互的类库,它使我们的应用能够实时的把数据推送给 ...

  3. ASP.NET Core SignalR

    ASP.NET Core SignalR 是微软开发的一套基于ASP.NET Core的与Web进行实时交互的类库,它使我们的应用能够实时的把数据推送给Web客户端. 功能 自动管理连接 允许同时广播 ...

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

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

  5. ASP.NET Core SignalR:基础概述

    一.简介 ASP.NET Core SignalR 是一个开源代码库,它简化了向应用添加实时 Web 功能的过程. 实时 Web 功能使服务器端代码能够即时将内容推送到客户端. SignalR 的适用 ...

  6. ASP.NET Core SignalR 使用

    SignalR: 实时 Web 功能使服务器端代码能够即时将内容推送到客户端(包括B/S,C/S,Andriod).   SignalR最新版本为3.0(截止2020-02-28)   SignalR ...

  7. ASP.NET CORE使用WebUploader对大文件分片上传,并通过ASP.NET CORE SignalR实时反馈后台处理进度给前端展示

    本次,我们来实现一个单个大文件上传,并且把后台对上传文件的处理进度通过ASP.NET CORE SignalR反馈给前端展示,比如上传一个大的zip压缩包文件,后台进行解压缩,并且对压缩包中的文件进行 ...

  8. [asp.net core]SignalR一个例子

    摘要 在一个后台管理的页面想实时监控一些操作的数据,想到用signalR. 一个例子 asp.net core+signalR 使用Nuget安装包:Microsoft.AspNetCore.Sign ...

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

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

随机推荐

  1. golang 指针类型学习

    对于指针类型不安全编程,通过指针值以及偏移量操作slice私有属性 // 通过指针值获取切片 func TestGetPrivate(t *testing.T) { s := []int{1, 2, ...

  2. 关于windows服务器wsus客户端配置的修改

    本文环境如下: 服务器:Windows Server 2012 R2 Standard 由于公司服务器是加了域环境的,又需要将wsus客户端指向另一台wsus服务器,修改本地组策略.可能会被域控给修改 ...

  3. kafka学习(四)kafka安装与命令行调用

    文章更新时间:2020/06/07 一.安装JDK 过程就不过多介绍了... 二.安装Zookeeper 安装过程可以参考此处~ 三.安装并配置kafka Kafka下载地址  http://kafk ...

  4. VueX中state变化捕捉不到_getters监测不到state的变化

    原因 可能有多种原因, 现在我说一下我碰到的一种情况: state种有一个变量叫state,它是一个json对象, 可把我害惨了.因为他这个json长这个样: messageBox:{ friendI ...

  5. python3 连接数据库~

    ~目前记录的是针对python3写的数据库连接,不适用于pyhon2.python3如果想要与数据库进行连接,则需要先下载对应各数据库的插件包,然后导入包.python3的插件下载地址:https:/ ...

  6. Book of Shaders 00 - 使用 VS Code 编写 GLSL

    0x00 写在前面 最近在学习由 Patricio 编写的 The Book of Shaders,这是一本关于 Fragment Shaders(片段着色器)的入门指南.为了在一个相对熟悉的平台运行 ...

  7. 《C++primerplus》第12章练习题

    做一下倒数两题,都是在队列模拟的程序基础上做点修改测试. 5.找出平均等候时间为1分钟时,每小时到达的客户数为多少(试验时间不少于100小时). 指定队伍最大长度10人,模拟100小时.粗略估计答案在 ...

  8. P4279 [SHOI2008]小约翰的游戏(Anti_nim)

    Link 题面 题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有 \(n\) 堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子, 在这堆石子中取走任意多的石子,但不 ...

  9. c#类(class)

    类 类的定义是以关键字class开始的,后面跟类的名称,类的主题包含一个花括号里,下面是类定义的一般格式. <access specifier> class class_name { // ...

  10. JavaScript事件对象属性e.target和this的区别

    前言: Event对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象eve ...