背景:

在阿里云服务器中搭建了常规的tcp server服务(基于.net framework 4.0)。用以实现远程控制家里的鱼缸灯,办公室的电脑开关机等功能。客户端采用PC桌面端和微信小程序端。

服务端:tcp server(基于.net framework 4.0)

客户端:PC桌面端软件(.net winform)、微信小程序

 问题:

微信小程序端支持websocket通信而且必须是wss(wss表示在TLS之上的websocket,相当于https),无法与tcp server直接通信。

    为什么不重新开发服务端呢?

一是我懒。

二是服务端TCP Server必须时刻保持与家里的鱼缸灯控制器,办公室的开关机控制器等设备的网络连接。而且还设定了定时执行的策略,故不适宜更换其他技术实现。

解决方法:

微信小程序的后端采用了asp.net web api (net6)搭建的接口服务。如果可以在该web api 接口服务中搭建websocket服务,中转微信小程序和tcp server服务端,同时升级TCP Server,使之同时支持tcp client连接和websocket连接,问题可得到解决。

开干!

    一、新建ASP.NET Core Web API  项目(net6)

基于net 6.0

    二、创建websocket中间件WebsocketHandler

新建类,名为:WebsocketHandler

在接收到websocket连接时,将触发Invoke函数。

关键代码:

 WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();_logger.LogInformation($"接收到websocket连接.");try{WebSocketReceiveResult result;do{var buffer = new byte[1024 * 1];result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);if (result.MessageType == WebSocketMessageType.Text && !result.CloseStatus.HasValue){var msgString = Encoding.UTF8.GetString(buffer);_logger.LogInformation($"接收到数据:{msgString}.");//发送接收到的信息await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, buffer.Length), WebSocketMessageType.Text, true, CancellationToken.None);}}while (!result.CloseStatus.HasValue);}catch (Exception ex){}

AcceptWebSocketAsync函数接收websocket连接,并把连接保存于变量webSocket。

定义变量WebSocketReceiveResult result用来接收客户端发送的数据,webSocket.ReceiveAsync函数接收数据。

webSocket.SendAsync函数实现向客户端发送数据的功能。

可以看到,为了测试发送和接收的功能,服务端将接收到的数据直接返回给客户端

    三、添加中间件

    在Program中添加此中间件:

app.UseWebSockets();
app.UseMiddleware<WebsocketHandler>();

至此,服务端已建好。

四、运行服务端

Ctrl+F5,运行服务端,可看到,监听端口为:5276

    五、创建客户端:测试.html

创建静态页面:webSocketClient.html,作为客户端,该客户端将实现向服务端发送消息,并接收服务端的消息。

使用原生javascript实现,不依赖其他js库。

关键函数:

创建websocket:new WebSocket(server + '/ws');

websocket打开成功事件:WEB_SOCKET.onopen

websocket接收消息事件:WEB_SOCKET.onmessage

websocket关闭事件:WEB_SOCKET.onclose

<button type="button" onclick="javascript:connectWebSocket()">测试</button>
    界面上放置一个按钮,触发websocket。

    六、测试成功

双击在浏览器中打开webSocketClient.html,同时按F12打开调试器。点击“测试”按钮,观察控制台面板,可看到websocket接收到来自服务器的消息“hello world”

    

    而服务端面板:显示接收到websocket连接并接收到消息“hello world"

    

我已将代码上传,下载码是:C67F979907

下载码是啥?如何下载=》点击查看

基于asp.netCoreWebApi的webSocket通信示例(net6)相关推荐

  1. 基于WS协议的webSocket通信

    使用的是java-webSocket github地址:https://github.com/TooTallNate/Java-WebSocket 客户端 private final Executor ...

  2. 基于asp.net2 C#开发MapServer

    MapServer是个开源GIS,这里不用介绍了. 网上有基于asp.net1.1 C#开发示例(Thinking in GIS  http://www.paolocorti.net) 下载的例子有个 ...

  3. JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)

    (一).概述 现在有好多比较优秀的客户端脚本语言组件, 如: Prototype.YUI.jQuery.mootools.Bindows, Scriptaculous, FCKEditor 等, 都非 ...

  4. python socket模块实现udp通信_Python基于socket模块实现UDP通信功能示例

    Python基于socket模块实现UDP通信功能示例 本文实例讲述了Python基于socket模块实现UDP通信功能.分享给大家供大家参考,具体如下: 一 代码 1.接收端 import sock ...

  5. 基于H5的webSocket通信

    基于H5的webSocket通信 这里主要以一个简单例子来做说明 创建一个主服务器 1.创建一个主服务器 主服务器创建逻辑过程 /*1.通过ws模块来创建服务器2.服务器连接客户端---(给客户端编号 ...

  6. javascript python 通信_Python通过websocket与js客户端通信示例分析

    具体的 websocket 介绍可见 http://zh.wikipedia.org/wiki/WebSocket 这里,介绍如何使用 Python 与前端 js 进行通信. websocket 使用 ...

  7. 基于 Asp.Net的 Comet 技术解析

    Comet技术原理 来自维基百科:Comet是一种用于web的技术,能使服务器能实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 简单的说是一种基于现 ...

  8. Python3+WebSockets实现WebSocket通信

    一.说明 1.1 背景说明 前端时间同事说云平台通信使用了一个websocket的东西,今天抽空来看一下具体是怎么个通信过程. 从形式上看,websocket是一个应用层协议,socket是数据链路层 ...

  9. 基于ASP.NET Core SignalR的流式传输

    基于ASP.NET Core SignalR的流式传输 SignalR概述 SignalR是ASP.NET Core下非常流行的实现Web实时功能的库.微软再文档中列出了适合的应用场景: 适合 Sig ...

最新文章

  1. python使用socket实现协议TCP长连接框架
  2. 如何优雅的关闭容器,看这一篇就够了
  3. 鱼油账号记录程序 - 零基础入门学习Delphi38
  4. 项目质量管理:质量与质量管理概念
  5. 云炬随笔20161012
  6. Match Points
  7. 【渝粤教育】 国家开放大学2020年春季 1325妇产科学与儿科护理学 参考试题
  8. pdf.js浏览中文pdf乱码的问题解决
  9. c语言char有什么作用,C语言中char*和char[]用法区别分析
  10. dg修改归档目录 oracle_DG环境下ORACLE自动回收归档空间
  11. 在Windows 下如何使用 AspNetCore Api 和 consul
  12. Dubbo 2.7.7 发布,FastJson 升级了!
  13. 电脑硬盘右击计算机就卡死,Win10电脑使用过程中莫名其妙卡死的的三种解决方法...
  14. 【RGB检测】基于matlab GUI图像RGB检测【含Matlab源码 088期】
  15. java简易计算器程序框图_简易计算器程序设计思路及流程图
  16. 网页采集器,全自动网站采集发布(图文)
  17. dell计算机的硬盘如何分区,戴尔电脑分盘怎么分区
  18. 联想笔记本电脑安装Ubuntu18.04系统
  19. 读文献——《Deep Residual Learning for Image Recognition》
  20. 范围变更管控案例_项目范围管理案例之范围确认案例

热门文章

  1. 029_《编程高手箴言》
  2. PHP清除网页病毒的方法
  3. 趋势科技协助FBI破获大型跨国网络犯罪案 瓦解超过400万Botnet 殭尸大军
  4. 系统工程师应具备的技能
  5. FPGA基础设计(二):任意分频器(奇数,偶数,小数)
  6. 史上最强算法论战:请不要嘻哈,这是哈希 文章中算法的java实现
  7. 传说中程序员都是直男,程序员适合做老公吗?
  8. 研发自主可控的国产联盟链:他们与多家知名机构合作落地项目
  9. matlab dpm目标检测,车辆目标检测
  10. 一文了解国内边缘计算玩家动态