阅读 61

SignalR开发的微信小程序使用websocket实现聊天功能

 SignalR依赖JQ,故小程序不能直接使用。 

uniapp版

SignalR的构建就不多说了,网上多得是。

原理:仿照官方JS访问服务器的方式,先用get方式请求negotiate接口,获取websocket的token,再拼接ws连接得到微信能用的ws或者wss连接了,接下来看微信小程序接口。

注意事项:

1.微信小程序本地测试不需要wss的,直接本机运行项目,用局域网网址访问就可以了。

2.websocket需要IIS8才能支持,IIS Express可以用,但需要配置一下用IP访问 (微信内不能用localhost访问)

 

了解websocket机制

  假设我在web端有一个聊天室页面,假设地址为https://www.xxx.com/chat.html,由于后端Startup.cs使用的是默认目录signalr

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(Star.Web.Startup))]
namespace Star.Web
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();//启动SignalR默认目录:/signalr
        }
    }
}
View Code

浏览器F12打开(以谷歌为例),点击Network,然后刷新页面或在页面发送一个消息,在下面Name里分别会出现negotiate开头和connect开头的Url。

  1)点击negotiate开头的url,在头文件中(Headers)的General的RequestURL,显示访问地址是:

//signalr的negotiate
https://www.text.com/signalr/negotiate?clientProtocol=1.5&connectionData=[{"name":"chatHub"}]&_=1576127697147

  整理后的含义为:https://域名/signalr/negotiate?clientProtocol=1.5&connectionData=[{"name":"Hub名字"}]&_=时间戳

  其中:Hub名字就是继承Hub类里的[HubName("Hub名字")],encodeURIComponent()编码

  2)点击connect开头的url,在头文件中(Headers)的General的RequestURL,显示访问地址是:

//signalr的connect
wss://www.test.com/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=……&connectionData=[{"name":"chatHub"}]&tid=1

  整理后的含义为:wss://域名/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=Token字符串&connectionData=[{"name":"Hub名字"}]&tid=1

其中:Token字符串就是上一个请求返回的结果;tid经测试取值在0~10之间,待进一步测试.

Vue page:把连接改为你的连接

 1 
15  
16 
89 

 

后续简单说下发送和接收消息体格式:

客户端向服务端发送消息体

格式:{"H":"chathub","M":"SendToOther","A":[{"Msg":"Hello World!","UserId":"085ac7c7-94be-4a41-93c7-c207939714b9"}],"I":2}

参数解释:"H":"ChatHub" 是集线器hub类,"M":"SendToOther"是集线器hub类暴露的方法,"A"是提交服务端的数据

服务端返回客户端的消息体 

格式:{"C":"d-26707556-E,0|BP,5B|BQ,1","M":[{"H":"ChatHub","M":"UpdateLocalhost","A":[{"UserId":"51c0b472-ea1c-424d-8dc4-157ce0cf1ff2","SendTime":"2020-06-12 16:12:41","Msg":"Hello World!"}]}]}

参数解释:"H":"ChatHub" 是集线器hub类,"M":"UpdateLocalhost"是服务端返回客户端的标识,"A"是服务端返回的数据

 

原文:https://www.cnblogs.com/liuchangxu/p/13100290.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐