網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
C#使用WebSocket與網(wǎng)頁(yè)實(shí)時(shí)通信的實(shí)現(xiàn)示例_C#教程
作者:Three?Big?Stones ? 更新時(shí)間: 2022-10-17 編程語(yǔ)言目的:使用Fleck框架實(shí)現(xiàn)網(wǎng)頁(yè)與服務(wù)端實(shí)時(shí)通信
傳統(tǒng)的網(wǎng)站采用http方式與服務(wù)端通信,屬于請(qǐng)求響應(yīng)模式,如何讓網(wǎng)頁(yè)與服務(wù)器之間能使用TCP這種雙向通信方式實(shí)時(shí)交流,答案就是使用WebSocket技術(shù)。
Fleck框架的安裝方式:
1、使用NuGet包管理工具安裝
Install-Package Fleck -Version 1.2.0
2、下載Fleck源碼并編譯程序集供服務(wù)端引用
github地址:https://github.com/statianzo/Fleck/archive/refs/heads/master.zip
gitee地址:https://gitee.com/mylikekefu/Fleck/repository/archive/master.zip
直接在VS中打開(kāi)項(xiàng)目,并生成fleck項(xiàng)目程序集
3、新建WebSocket服務(wù)端項(xiàng)目,命名WebSocketConsoleApp
4、引用程序集Fleck.dll
5、程序入口類編寫服務(wù)端代碼,如下所示:
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 => {
//客戶端連接上服務(wù)端,則在socket列表添加一個(gè)客戶端
socket.OnOpen = () => {
Console.WriteLine("Open!");
allSockets.Add(socket);
};
//客戶端離線,則從socket列表刪除這個(gè)客戶端
socket.OnClose = () => {
Console.WriteLine("Close!");
allSockets.Remove(socket);
};
socket.OnMessage = message => {
Console.WriteLine(message);
//給發(fā)送消息的客戶端回復(fù)一條消息
socket.Send("Echo:" + message);
});
var input = Console.ReadLine();
//給所有客戶端發(fā)送消息
while(input!="exit")
{
foreach (var socket in allSockets.ToList())
{
socket.Send(input);
}
input = Console.ReadLine();
}
}
6、啟動(dòng)項(xiàng)目,打印如下信息,服務(wù)端啟動(dòng)成功。
7、新建客戶端,使用瀏覽器F12控制臺(tái)模擬websocket客戶端,代碼如下所示:
ws = new WebSocket("ws://192.168.3.3:50000");
ws.onopen = function() {
ws.send('websocekt測(cè)試');
};
ws.onmessage = function(e) {
alert("收到服務(wù)端的消息:" + e.data);
};
打開(kāi)兩個(gè)瀏覽器頁(yè)面,分別F12,控制臺(tái)中輸入以上代碼,表示新建了兩個(gè)客戶端,將會(huì)分別收到服務(wù)端回復(fù)的消息。
在其中一個(gè)客戶端輸入代碼:ws.send('xtt');發(fā)現(xiàn)只有這個(gè)客戶端收到了回復(fù)的消息。
查看服務(wù)端打印情況如下所示:
原文鏈接:https://blog.csdn.net/dandingwangzi/article/details/126325089
相關(guān)推薦
- 2022-05-23 如何使Python中的print()語(yǔ)句運(yùn)行結(jié)果不換行_python
- 2023-11-20 Linux、jetson nano、JTX、英偉達(dá)、nVidia查看cuda版本
- 2022-09-27 C#中的const和readonly關(guān)鍵字詳解_C#教程
- 2022-04-04 webpack-loader: loader的使用(圖片、txt文件、url、less)
- 2023-01-12 Android入門之BroadCast模擬實(shí)現(xiàn)異地登錄事件發(fā)生后的主動(dòng)退出_Android
- 2022-11-25 詳解C++中類的六大默認(rèn)成員函數(shù)_C 語(yǔ)言
- 2022-08-15 Python自制隨機(jī)數(shù)生成算法
- 2022-07-26 Fatal error in launcher: Unable to create process
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支