C#使用WebSocket与网页实时通信的实现示例
作者:Three 发布时间:2023-02-15 01:22:24
标签:C#,WebSocket,网页,实时通信
目的:使用Fleck框架实现网页与服务端实时通信
传统的网站采用http方式与服务端通信,属于请求响应模式,如何让网页与服务器之间能使用TCP这种双向通信方式实时交流,答案就是使用WebSocket技术。
Fleck框架的安装方式:
1、使用NuGet包管理工具安装
Install-Package Fleck -Version 1.2.0
2、下载Fleck源码并编译程序集供服务端引用
github地址:https://github.com/statianzo/Fleck/archive/refs/heads/master.zip
gitee地址:https://gitee.com/mylikekefu/Fleck/repository/archive/master.zip
直接在VS中打开项目,并生成fleck项目程序集
3、新建WebSocket服务端项目,命名WebSocketConsoleApp
4、引用程序集Fleck.dll
5、程序入口类编写服务端代码,如下所示:
static void Main(string[] args)
{
FleckLog.Level = LogLevel.Debug;
var allSockets = new List<IWebSocketConnection>();
var server = new WebSocketServer("ws://192.168.3.3:50000");
server.Start(socket => {
//客户端连接上服务端,则在socket列表添加一个客户端
socket.OnOpen = () => {
Console.WriteLine("Open!");
allSockets.Add(socket);
};
//客户端离线,则从socket列表删除这个客户端
socket.OnClose = () => {
Console.WriteLine("Close!");
allSockets.Remove(socket);
};
socket.OnMessage = message => {
Console.WriteLine(message);
//给发送消息的客户端回复一条消息
socket.Send("Echo:" + message);
});
var input = Console.ReadLine();
//给所有客户端发送消息
while(input!="exit")
{
foreach (var socket in allSockets.ToList())
{
socket.Send(input);
}
input = Console.ReadLine();
}
}
6、启动项目,打印如下信息,服务端启动成功。
7、新建客户端,使用浏览器F12控制台模拟websocket客户端,代码如下所示:
ws = new WebSocket("ws://192.168.3.3:50000");
ws.onopen = function() {
ws.send('websocekt测试');
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
};
打开两个浏览器页面,分别F12,控制台中输入以上代码,表示新建了两个客户端,将会分别收到服务端回复的消息。
在其中一个客户端输入代码:ws.send('xtt');发现只有这个客户端收到了回复的消息。
查看服务端打印情况如下所示:
来源:https://blog.csdn.net/dandingwangzi/article/details/126325089


猜你喜欢
- 前言之前我们提到了 CustomPaint er 的 Paint 可以使用渐变(GradientShader)来填充绘制的图形,本篇我们来介
- 一、settings.xml文件会在两个目录下存在:1、Maven安装目录(全局):%MAVEN_HOME%\conf\settings.x
- 问题线上程序出现了OOM,程序日志中的输出为Exception in thread "http-nio-8080-exec-102
- java 图片转base64字符串、base64字符串转图片,具体内容如下1. 图片转base64字符串: /** * base
- 序言之前封装过一个日志注解,打印方法执行信息,功能较为单一不够灵活,近来兴趣来了,想重构下,使其支持表达式语法,以应对灵活的日志打印需求。该
- 一、概述项目中经常用到倒计时的功能,比如说限时抢购,手机获取验证码等等。而google官方也帮我们封装好了一个类:CountDownTime
- 背景 我们知道在.NET Framework中存在四种常用的定时器,他们分别是:1 两个是通用的多线程定时器:Syste
- 最小堆基本思想:堆对应一棵完全二叉树,且所有非叶结点的值均不大于(或不小于)其子女的值,根结点(堆顶元素)的值是最小(或最大)的,每次都取堆
- 最近在定制Android系统音量条,发现代码还是蛮多的,下面总结一下。 代码是基于5.1.1版本的。 系统音量条的代码是在/framewor
- 最近在做一个移动端HTML5的应用,使用到了上传功能,起初使用传统的上传方式上传手机拍照的照片,由于手机拍照出来的照片一般都是好几MB,所以
- java对字符串进行utf-8编码我们在调用第三方 API 时,常常会被要求用到路径变量,而路径变量一般都是 utf-8 编码的,因此需要对
- C语言的指针相当的灵活方便,但也相当容易出错。许多C语言初学者,甚至C语言老鸟都很容易栽倒在C语言的指针下。但不可否认的是,指针在C语言中的
- 背景在一些业务场景, 往往需要自定义异常来满足特定的业务, 主流用法是在catch里抛出异常, 例如:public void deal()
- Ireport的安装及使用一、 安装ireport1.点击安装包,可以一直点击下一步,安装完成。2.安装完成后,要在如下安装目录下添加ojd
- 一.前提1.栈的内存原理图2.JVM是怎么运行方法的???1.在运行阶段的时候,classLoader类加载器会把class文件中方法对应的
- 还记得警匪片上,匪徒们是怎么配合实施犯罪的吗?一个团伙在进行盗窃的时候,总有一两个人在门口把风——如果有什么风吹草动,则会立即通知里面的同伙
- 本文实例讲述了Java Socket实现传输压缩对象的方法。分享给大家供大家参考,具体如下:前面文章《Java Socket实现的传输对象功
- 最近在做学校的课程设计,java编程需要用到对话框弹出,第一反应是js中的alert和confirm,java的话瞬间懵,查阅学习总结如下,
- 一、IDEA下载idea、jdk、tomcat、maven下载地址请参考上一篇博客:https://blog.csdn.net/DwZ735
- Dubbo服务暴露机制前言在进行服务暴露机制的分析之前,必须谈谈什么是URL,在Dubbo服务暴露过程中URL是无处不在的,贯穿了整个过程。