.Net版Websocket简单封装

.NET平台下websocket协议的实现! 本文完全原创,有问题请多多指教   。      最近一个项目需要做一个客户端运行与浏览器上面的即时通讯程序,原本我写的服务器端程序已经实现了,无奈通信层是在TCP套接字层上,单纯通过浏览器虽然可以实现,但是需要依赖于浏览器插件,而老师的要求是跨平台,并且浏览器插件的方式技术欠缺,所以决定重写浏览器端程序,使用javascript直接支持的通信协议。     传统的B/S架构即时通讯方 阅读详情

websocket 服务端使用的是Fleck编写

using Fleck;
using HomeMediaFileManageSystemUtilts.Log;
using System;
using System.Collections;
using System.Configuration;
namespace UploadAndDownloadTool.Helper.WebSocket
{

    /// <summary>
    /// WebSocket帮助类是帮助后台向前台发送数据
    /// 而不需要前台主动请求的一个类
    /// 支持群发 单发
    /// 避免前台使用Ajax轮询   造成不必要的资源消耗
    /// 这个WebSocket  使用的是FLeck实现 类似的有SignalR(微软自家的)
    /// </summary>
    public class WebSocketHelper
    {

        //保存客户端连接对象
        static Hashtable htSocket = new Hashtable();
        //WebSocket的实例
        static WebSocketServer socket = default(WebSocketServer);
        //会话Id
        static string SessionId = string.Empty;
        #region WebSocket服务器
        /// <summary>
        /// WebSocket服务器(连接)
        /// 
        /// </summary>
        /// <param name="url"></param>
        public static void WebSocketByServer(string url=default(string))
        {
            var SessoionId = string.Empty;
            //调试级别
            FleckLog.Level = LogLevel.Warn;
            try
            {
                if (string.IsNullOrEmpty(url))
                {
                    url = ConfigurationManager.AppSettings["SocketUrl"].ToString();
                }
                socket = new WebSocketServer(url);
                socket.Start(x =>
                {
                    x.OnOpen = () =>
                    {
                        SessoionId = x.ConnectionInfo.Id.ToString();
                    //添加到HashTable
                    htSocket.Add(SessoionId.ToString(), x);
                        Log.Warn("客户端连接ID: " + SessoionId.ToString());
                        Log.Warn("客户端地址:" + x.ConnectionInfo.ClientIpAddress);
                        Log.Warn("已连接");
                    //连接成功时把当前连接的ID发送到前台
                    x.Send(x.ConnectionInfo.Id.ToString());
                    };
                    x.OnClose = () =>
                    {
                    //刷新页面或关闭断开 把SessionId清空
                    SessionId = string.Empty;
                        htSocket.Remove(x.ConnectionInfo.Id);
                        Log.Debug("已关闭");
                    };
                });
            }
            catch (Exception ex)
            {
                Log.Warn("WebSocket连接失败;失败信息:" + ex.Message);
                Log.Warn("------------------------详细信息----------------------------");
                Log.Warn("WebSocket连接失败;失败信息:" + ex.StackTrace);
            }

        }
        #endregion

        #region 主动向页面发送数据(群发)
        /// <summary>
        /// 后台向前台发送信息(群发)
        /// </summary>
        /// <param name="sendMsg">要发送的信息</param>
        public static void AutoSendToPages(object sendMsg)
        {
            //遍历Keys 根据Keys  获取值转换WebSocketConnection对象
            foreach (string value in htSocket.Keys)
            {
                if (null != htSocket[value])
                {
                    var UserInfo = htSocket[value] as WebSocketConnection;
                    UserInfo.Send(sendMsg.ToString());
                }
            }
          

        }
        #endregion

        #region 主动向页面发送数据(单发)
        /// <summary>
        /// 主动向页面发送数据(单发)
        /// </summary>
        /// <param name="socketId"></param>
        /// <param name="message"></param>
        public static void AutoSendToPage(string socketId, object message)
        {
            if (null != htSocket[socketId])
            {
                var userSocket = htSocket[socketId] as WebSocketConnection;
                userSocket.Send(message.ToString());
            }
        }
        #endregion

    }
}
基于.NET的WebSocket聊天室系统设计与实现 为了避免在每个Endpoint中写一堆样板代码,我们可以创建一个基类统一封装通用逻辑:tryfinally这个设计模式有几个好处:异常隔离:每个连接的错误不会影响其他连接;职责分离:连接管理归,业务逻辑归具体Handler;易于扩展:派生等专用处理器。是不是感觉清爽多了?😎现在我们已经搭好了骨架,接下来让它动起来吧! 阅读详情

相关推荐

【数据分析生命周期全揭秘】从零开始打造你的数据科学项目 | 最全指南

在当今数据驱动的世界中,数据科学正在颠覆传统行业,成为企业决策和价值创造的重要引擎。然而,如何科学、系统地开展一个数据分析项目?这是很多人关心的核心问题。本篇文章基于经典数据分析课程内容,深入解读数据分析生命周期的每个阶段,让你快速掌握从“发现问题”到“落地应用”的完整流程。如果你正在学习或准备从事数据分析领域,这篇文章一定会对你大有帮助!数据分析生命周期的六大阶段数据分析生命周期的六个阶段相辅相成,每个阶段都至关重要:发现问题:明确需求,提出假设。数据准备:清洗、转换和可视化数据。

AI手套的博客 1743

.NET Core中WebSocket的使用详解

一、WebSocket是什么 初次接触WebSocket,大家都会问:我们已经有了HTTP协议,为什么还需要WebSocket? 因为HTTP协议中通信只能由客户端发起,而WebSocket协议中服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,实现了浏览器与服务器全双工通信(full-duplex),WebSocket属于服务器推送技术的一种。 WebSocket是HTML5的一种新协议,它使用JavaScript调用浏览器的API发出一个WebSocket请求至服

xiaouncle的博客 3万+

LangChain开发避坑指南:为什么Pylance总提示‘无法解析导入‘?实测7种修复方案

本文深入解析了在VS Code中使用LangChain开发时,Pylance频繁提示‘无法解析导入’的根本原因——Python解释器与语言服务器的环境路径不一致。文章提供了从基础排查到深度配置的7种实测修复方案,包括切换解释器、配置extraPaths、使用pyrightconfig.json等,旨在帮助开发者彻底解决此问题,提升AI应用开发效率。

weixin_28826521的博客 447

.NET WebSocket 核心原理初体验

上个月我写了《.NET gRPC核心功能初体验》, 里面使用gRPC双向流做了一个打乒乓球的Demo, [实时][双向]这两个标签是不是很熟悉,对, WebSockets也可以做实时双向通...

dotNET跨平台 572

Zabbix华为交换机光衰告警

zabbix使用自动发现监控huawei网络设备光衰

qq_31651649的博客 4530

OpenFoam实用技巧——starccm网格高效转换openfoam格式全解析

本文详细解析了如何利用OpenFOAM官方工具`ccm26toFoam`,将STAR-CCM+生成的高质量网格高效、稳定地转换为OpenFOAM格式。内容涵盖从STAR-CCM+正确导出网格、执行转换命令、解读转换日志,到转换后关键的边界条件修复与网格质量检查等全流程,旨在帮助用户规避常见错误,实现无缝工作流衔接。

weixin_28309571的博客 460

【.NET】简单实现Websocket客户端和服务端通讯方式(原生开发方式和DotNetty方式)...

前言:早上在一个群里看到一个小伙子的ID叫netty,就想到了dotnetty,于是就顺便想起写个dotnetty的入门文章好了。由于dotnetty不维护了,所以后面也提供了一个原生的开发方式(.NET CORE 3.1以及以上版本支持)趁着台风要放假没啥玩的,就开始动手写一个吧!以下正文:一、Dotnetty的方式(Dotnetty项目微软已经不维护了,但是还可以用)1.1创建一个服务端和一...

dotNET跨平台 2654

DIY音频必备:手把手教你用AB类功放模块打造高保真桌面音响(含电路图)

本文详细指导如何利用AB类功放模块DIY高保真桌面音响,涵盖选型指南、核心元器件清单、电路搭建与焊接工艺,以及系统调试与音质优化技巧。AB类功放以其接近A类功放的音质和B类功放的效率,成为音频爱好者的理想选择,适合有一定电子基础的实践者。

weixin_42665725的博客 445

.NET 聊天软件,使用 WebSocket 和 H5 开发即时通讯软件,Web 网页聊天系统

使用 asp.net + websocket + h5 开发一个简单的即时通讯软件。

KeiSoft 2321

5、Visual Studio Code:强大的编码与文件管理功能

本文详细介绍了 Visual Studio Code 的强大编码与文件管理功能,涵盖代码导航、引用查找、符号重命名、实时代码分析、IntelliCode 提示、文件和文件夹操作等内容。通过功能对比、流程图和实际开发案例,展示了 VS Code 如何提升开发效率和代码质量,适用于各类编程语言和项目开发场景。

water的专栏 134

【数据集】CMIP6气候模式数据下载

简介CMIP6及其气候模式数据下载

WW、forever的博客 9360

Asp.Net Core6 WebSocket 简单案例

一、Asp.Net Core6 后端,开启并绑定服务器端WebSocket1. 启动文件启动绑定 2.封装监听响应 二、客户端连接并监听相应内容1.html 2.js 查看预览结果: 更多:

天马3798 4405

uniapp(微信小程序) - 实现uniapp小程序电子签名板,横屏手写姓名签名专用写字画板,客户专用签字板,手写签名签字画板组件,手写签名,(详细运行示例,一键复制开箱即用)

uniapp实现微信小程序的电子签名效果,uniapp微信小程序 电子签名 写字板,用uniapp实现微信小程序的电子签名,uniapp微信小程序canvans实现手写签名,记录一个uniapp写的小程序的手写板,横屏,用于签名,unniapp实现电子签名,uniapp怎么做横屏的手写签名,uniapp如何实现签字板,uniapp小程序平台下怎么做电子签名板组件,uniapp电子签名插件,uniapp最好用的电子写字板插件组件源码,实现uniapp 手写签名功能,手写板、签字板,uni-app插件市场最好的

✅ 精选推荐文章 1万+

ASP.NET Core通过Websocket建立简单聊天室

初学者的傻瓜式笔记,备忘

m0_64916060的博客 2098

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WebSocket In ASP.NET Core(二)

Introduce  上篇博文中,介绍了WebSocket的基本原理,以及一个简单的Demo用来对其有一个大致的认识。这篇博文讲的是我们平常在网站上可能会经常遇到的——实时聊天,本文就是来讲在.NET-Core使用WebSocket来实现一个“乞丐版”的在线实时聊天Demo。关键词:Middleware,Real-Time,WebSocketBefore You Read. 这个和我们上一篇博文中

dotNET跨平台 2798

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WebSocket4Net API详解:掌握IWebSocket接口与核心类设计

WebSocket4Net是一款流行的.NET WebSocket客户端库,为开发者提供了高效、可靠的WebSocket通信能力。本文将深入解析其核心API设计,帮助新手快速掌握IWebSocket接口与关键类的使用方法。 ## 📌 核心接口IWebSocket:定义通信规范 IWebSocket接口是WebSocket4Net的核心抽象,位于[src/WebSocket4Net/IWebS

gitblog_00537的博客 761

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ASP.NET Core WebSocket、SignalR

ASP.NET Core SignalR(以下简称SignalR),是.NET Core平台下对WebSocket的封装。 Hub(集线器),数据交换中心。WebSocket基于TCP协议,支持二进制通信,双工通信。 性能和并发能力更强。 WebSocket独立于HTTP协议,不过我们一般仍然把WebSocket服务器端部署到Web服务器上,因为可以借助HTTP协议完成初始的握手(可选),并且共享HTTP服务器的端口(主要)。

Anoxia_li的博客 1366

ASP.NET Core中WebSocket与SignalR的抉择

场景推荐技术高性能、低延迟、自定义协议WebSocket快速开发、通用实时功能SignalR浏览器兼容性要求高SignalR需要精细控制通信过程WebSocket如果你正在开发一个简单的聊天室或通知系统,SignalR 是更好的选择;而如果你需要构建一个高性能、低延迟的物联网通信系统,WebSocket 更合适。

ZHUYan23_的博客 795

WebSocket4Net.dll资源下载介绍:WebSocket通信的便捷解决方案

WebSocket4Net.dll资源下载介绍:WebSocket通信的便捷解决方案 去发现同类优质开源项目:https://gitcode.com/ WebSocket4Net.dll是一个功能强大的.NET平台WebSocket类库,它为开发者提供了快速接入WebSocket协议并实现数据交换的能力。 项目介绍 WebSocket4Net.dll是专门为.NET环境设计的WebSocket类库...

gitblog_06752的博客 485

Asp.Net Core WebSocket绑定

转:https://blog.csdn.net/u011127019/article/details/77408072 1.说明 Asp.Net Core中WebScoket的操作使用基本上和Asp.net中相同,不同的是,绑定监听。 Asp.Net Core2.0默认已经支持WebSocket,不需要另外安装Nuget包。  通过对HttpContext中的WebSockets.Acce...

xsfqh的专栏 1313

go 网络编程 websocket gorilla/websocket

在 Go 语言中,你可以使用标准库中的 net/http 包和第三方库 gorilla/websocket 来实现一个 WebSocket 服务器。gorilla/websocket 库提供了对 WebSocket 协议的高级抽象,使得处理 WebSocket 连接变得相对简单。

记录 分享 成就 835

基于.NET 的WebSocket 的简单实例 --- 数据格式

上一篇我们已经在服务器和客户端之间建立起一个能双向通讯的途径,如果你马上按以前的经验直接丢送数据,恭喜,数据能过去,可你却根本不认识,这是自然,他的地盘他要做主,websocket 有其自己约定的数据格式,我们必须按照这个格式来才行的。 协议这玩意,很是枯燥,只能用,不能创新,但多了解一些这种规则,对以后我们定义传输协议有很强的参考价值,所以我们还是得认真瞧瞧。 打开:http://too

逍遥谷主 的专栏 681

Asp.Net Core中WebSocket绑定的方法详解

说明 Websocket是html5后的产物,对于asp.net core中也得到了支持,Asp.Net Core中WebScoket的操作使用基本上和Asp.net中相同,不同的是,绑定监听。 Asp.Net Core2.0默认已经支持WebSocket,不需要另外安装Nuget包。 通过对HttpContext中的WebSockets.AcceptWebSocketAsync方法,接受WebSocket请求;并返回WebScoket对象。 下面话不多说了,来一起看看详细的介绍吧。 一、示例1, 1.后台

极客神殿 988

.NET Core 实现基于Websocket的在线聊天室

什么是Websocket我们在传统的客户端程序要实现实时双工通讯第一想到的技术就是socket通讯,但是在web体系是用不了socket通讯技术的,因为http被设计成无状态,每次跟服务...

dotNET跨平台 1054
上一篇: Centos7配置静态IP(外部和内部可以互相ping)
下一篇: .Net版本 递归生成多级菜单
_徐林
博客等级 码龄9年 6粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值