• 朋友圈,提供博客收录、文章聚合展示等功能,欢迎来这里发现有趣的博客并尝试与博主成为朋友!如果你拥有一个独立博客,就赶快申请加入吧,逾 9 位博友正在等你哦!

【CSharp】使用Fleck库实现WebSocket服务

前言 最近公司有个项目需要用C/S架构的桌面应用程序与B/S架构的网页程序进行通信做数据的交互功能。在网上查了一下资料,发现 Fleck 实现一个WebSocket服务竟然如此简单明了,于是在此记录和整理了一下 Fleck 实现WebSocket服务的简单应用,希望对你有所帮助。 简介 Fleck 是一个用C#编写的轻量级WebSocket服务器库,它易于使用且高性能,同时保持代码的简洁性。 特点: 无需继承:Fleck不需要你继承任何类,也不需要依赖于容器或额外的引用。 无依赖:Fleck不依赖于HttpListener或HTTP.sys,这意味着它可以在Windows 7和Server 2008主机上工作。 跨平台:由于不依赖于HttpListener,Fleck可以在非Windows平台上运行。 使用 安装Fleck 通过NuGet包管理器安装Fleck库 Install-Package Fleck 创建WebSocket服务器 以下是一个简单的WebSocket服务器示例: using Fleck; using System; using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; namespace WebSocketServiceDemo { public class WebSocketService { /// <summary> 客户端url以及其对应的Socket对象字典 </summary> public IDictionary<string, IWebSocketConnection> dic_Sockets = new Dictionary<string, IWebSocket...

【CSharp】lock(this)与lock(private object)区别

前言 在使用多线程编程时,我们会对代码关键部分确保其一次只由一个线程执行,对于防止争用条件和保持数据完整性至关重要。在C#中,lock 语句就是用于通过同步对共享资源的访问来实现此目的工具。本文介绍lock(this) 与lock(private object) 两种方法及区别。 简介 lock(this) 与 lock(private object) 两种方法都可用于控制对代码块的访问,但在安全性和意外交互的可能性方面有所不同。正确选择对象进行锁定可能会对代码的安全性和可靠性产生重大影响。 1、lock(this) 使用 lock(this) 时,我们是锁定类的当前实例。也就是说锁被放置在代码当前正在操作的对象上。 public class MessageBox { public void ShowMessage() { lock (this) { // 输出信息 Console.WriteLine("感谢您的支持!"); } } } 上面示例,使用lock(this)确保ShowMessage方法一次只由一个线程对MessageBox的每个实例执行。这将存在被暴露于公开场合的问题。当有其他人也引用此对象,并对其锁定时,这这可能会导致死锁或其他问题。 2、lock(private object) 使用lock(private object)时,我们将锁定一个私有对象,该对象通常是专为此目的而创建的对象的实例。这是一种更安全、更常见的做法。 public class MessageBox { // 定义锁定对象 private readonly object lockobject = new object(); public ...

解决Windows 11 24H2中使用NetSetMan无法访问WiFi管理

前言 在Windows 11 24H2版本中NetSetMan中无法查看WiFi,显示 WLAN 已断开,且自动切换无法正常工作。 解决 在 Windows 11 24H2 中,Microsoft 添加了一项新限制,将对 WiFi API 的访问隐藏在位置隐私设置后面。如果您禁用了桌面应用程序的位置访问权限,则需要手动启用它: Windows >设置>隐私和安全>位置 如果您从未更改过该设置,则 Windows 会在桌面应用程序首次尝试访问 WiFi API 时询问您。

更适合新手的 AI 口语对话练习应用—— BabelDuck |好玩儿的Docker项目

1. 唠嗑 随着国际形势的发展,英语的重要性越来越高,(比如开个美卡遇到问题和客服沟通都有问题) 听读能力我们普遍比较强,薄弱的往往是说写能力,而其中的”写“现在又可以用GPT来辅助了,所以这一期我们就来分享一个提高英语的“说“的能力的小工具——BabelDuck。 BabelDuck是一个面向各水平层次语言学习者的高度可定制化 AI 口语对话练习应用,并对初学者更友好,旨在将口语表达练习的门槛与心智负担降至最低。 2. babelduck主要功能( 抄 来自官方GitHub) 支持多对话管理、自定义系统提示词、流式响应等常见 AI 对话功能 可在不影响当前对话的前提下,向 AI 寻求语法、翻译或表达润色等建议,并提供可定制化的快捷指令 在对 AI 提供的建议有疑问时,可开启子对话进一步讨论,讨论结束后可无缝返回原对话 支持语音输入与语音输出,集成了浏览器内置文本转语音 以及 Azure TTS 集成多种 LLM AI 服务,支持自定义第三方 API 服务,可无缝切换(目前只支持OpenAI的API) 数据存储于本地,确保用户数据隐私安全 支持针对不同对话进行单独的偏好设置 提供多语言界面 内置使用教程 支持Docker部署,更新维护方便 🎯 未来规划 对话模板 复述练习模式 移动端适配 语音回放 支持多模态语音 接入更多 LLM/TTS/STT 服务 实时语音模式 更多指令类型 插件系统 3. 相关地址 官方GitHub地址:https://github.com/Orenoid/BabelDuck (全新项目,目前188个star,欢迎大家去给项目点星星!) 4. 搭建环境 服务器:咕咕这边用的莱卡云香港服务器,建议服务器内存1G以上,当然你也可以选择其他高性价比的服务器。 系统:Debian 11 (DD 脚本 非必需 DD,用原来的系统也 OK,之后教程都是用 De...

【CSharp】在WPF应用程序中捕获全局异常

前言 在WPF(Windows Presentation Foundation)应用程序中捕获全局异常,通常可以通过以下几个步骤来实现: Application.DispatcherUnhandledException事件: 这是WPF中用于捕获未处理异常的主要事件。你可以在App.xaml.cs文件中订阅这个事件来处理全局异常。 public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); this.DispatcherUnhandledException += new System.Windows.Threading.DispatcherUnhandledExceptionEventHandler(App_DispatcherUnhandledException); } private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { // 处理异常,例如显示错误消息 // 可以在这里记录日志,或者显示一个友好的错误消息给用户 // 注意:不要在这里直接处理异常,否则异常不会被外部的调试器捕获 // e.Handled = true; // 如果你想要阻止异常继续传播,可以设置这个属性为true // 记录异常信息 // LogException...

10分钟搭建一个本地化图片处理工具——Reubah,拒绝隐私泄露!|好玩儿的Docker项目

1. 唠嗑 日常工作的时候经常会遇到需要处理一些图片的问题(比如压缩图片,转换格式啊之类的),虽然网上随便一搜能搜索到很多可以直接使用的工具,但是会有小伙伴会担心隐私泄露。 这一期就和大家分享一个刚开发不久的可以自己搭建的方便处理文档/图片压缩,格式转换之类的小工具。 2. reubah主要功能 目前的功能特点: 开源免费,不存储你的数据 支持大多数的图片转换,压缩 Docker一键部署,方便升级和维护 支持部分文档的格式转换 支持批量处理 2.1 图片处理 1.11 MB压完之后是141.62 KB 压缩完的画质感觉差别不是很大: 背景去除的功能目前还在开发中, 2.2 文件处理 2.3 批量处理 3. 相关地址 官方GitHub地址:https://github.com/dendianugerah/reubah (全新项目,目前145个star,欢迎大家去给项目点星星!) 4. 搭建环境 服务器:咕咕这边用的腾讯云轻量应用服务器,建议服务器内存1G以上,当然你也可以选择其他高性价比的服务器。 系统:Debian 11 (DD 脚本 非必需 DD,用原来的系统也 OK,之后教程都是用 Debian 或者 Ubuntu 搭建~) 安装好 Docker、Docker-compose(相关脚本) 【必需】域名一枚,并做好解析到服务器上(域名购买、域名解析 视频教程) 【非必需】提前安装好宝塔面板海外版本 aapanel,并安装好 Nginx(安装地址) 【非必需本教程选用】安装好 Nginx Proxy Manager(相关教程) 5. 搭建视频(过俩天补充 = =) 5.1 YouTube 视频地址: 5.2 哔哩哔哩 哔哩哔哩: 6. 搭建方式 6.1 安装 Docker 与 Nginx Proxy Manager 可以直接参考这篇内容: https://blog.laod...

瓦屋山遛娃之旅

20241221-瓦屋山溜娃之旅

1Panel 自建邮局 - Docker Mailserver

本文讨论了自建邮局的复杂性和推荐使用托管服务,如Cloudflare和阿里企业邮箱。自建邮局存在配置复杂、维护成本高和送达率不稳定等缺陷。文章提供了通过1Panel面板部署Docker Mailserver的详细步骤,包括申请TLS证书、安装Mailserver、配置TLS、创建账户和生成DKIM记录。

1Panel 推送 SSL 证书到阿里云、腾讯云

随着证书有效期缩短,使用CDN的站点面临频繁更新证书的挑战。1Panel在v1.10.12-lts中引入自动续签证书后允许用户自定义脚本的功能,简化了证书管理。通过Docker构建的aliyun-tccli镜像,用户可以轻松将SSL证书推送到阿里云和腾讯云的CDN服务,减少管理复杂性和成本。