返回
WebSocket实现即时通信 前后端代码示例
2023-10-23 2433 0
WebSocket是HTML5提供的一种浏览器与服务器进行全双工通信的技术。它允许服务器主动向客户端推送数据,实现实时的双向通信。
WebSocket的主要特点包括:
- 建立在TCP协议之上,使用HTTP协议进行握手。
- 可以发送文本或二进制数据。
- 没有同源限制,可以跨域通信。
- 协议标识符是ws(如果加密,则为wss),默认端口号是80(如果加密,则为443)。
下面我将分别介绍前端Vue.js和后端c#的实现代码。
前端代码(使用Vue.js):
1、安装Vue.js和WebSocket库:
npm install vue
npm install vue-websocket
2、在Vue组件中引入WebSocket库:
import Vue from 'vue';
import VueWebSocket from 'vue-websocket';
Vue.use(VueWebSocket, 'ws://localhost:8080'); // 替换为实际的WebSocket服务器地址
export default {
// ...
}
3、在Vue组件中使用WebSocket:
export default {
// ...
mounted() {
this.$socket.addEventListener('open', () => {
console.log('WebSocket连接已建立');
});
this.$socket.addEventListener('message', (event) => {
console.log('收到消息:', event.data);
});
this.$socket.addEventListener('close', () => {
console.log('WebSocket连接已关闭');
});
},
methods: {
sendMessage(message) {
this.$socket.send(message);
}
}
}
后端代码(使用C#):
1、创建一个WebSocket处理类:
using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
public class WebSocketHandler
{
private WebSocket _webSocket;
public async Task Handle(WebSocket webSocket)
{
_webSocket = webSocket;
await ReceiveLoop();
}
private async Task ReceiveLoop()
{
var buffer = new byte[1024];
while (_webSocket.State == WebSocketState.Open)
{
var result = await _webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
if (result.MessageType == WebSocketMessageType.Text)
{
var message = Encoding.UTF8.GetString(buffer, 0, result.Count);
Console.WriteLine("收到消息: " + message);
// 处理收到的消息,比如广播给所有连接的客户端
await Broadcast(message);
}
else if (result.MessageType == WebSocketMessageType.Close)
{
await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
}
}
}
private async Task Broadcast(string message)
{
// 广播给所有连接的客户端
// 例如,可以遍历所有WebSocket连接,然后调用SendAsync方法发送消息
}
}
2、创建一个WebSocket中间件:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using System.Net.WebSockets;
using System.Threading.Tasks;
public class WebSocketMiddleware
{
private readonly RequestDelegate _next;
public WebSocketMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
if (context.WebSockets.IsWebSocketRequest)
{
var webSocket = await context.WebSockets.AcceptWebSocketAsync();
var handler = new WebSocketHandler();
await handler.Handle(webSocket);
}
else
{
await _next(context);
}
}
}
public static class WebSocketMiddlewareExtensions
{
public static IApplicationBuilder UseWebSocketMiddleware(this IApplicationBuilder builder)
{
return builder.UseMiddleware<WebSocketMiddleware>();
}
}
3、在Startup.cs中注册WebSocket中间件:
public class Startup
{
// ...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
app.UseWebSocketMiddleware();
// ...
}
}
以上就是WebSocket即时通信的主要功能的前端和后端代码实现。在前端代码中,我们使用Vue.js和vue-websocket库来建立WebSocket连接,并监听open、message和close事件,以及发送消息。在后端代码中,我们使用C#的WebSocket API来处理WebSocket连接和消息的收发。通过这样的实现,我们可以在前端和后端之间实现实时的双向通信。
网友点评
提交
相关阅读
为什么Web不采用WebSocket进行数据交互
实时通信协议SSE和WebSocket对比
使用WebSocket开发网页聊天示例
C# WebSocket Client在linux连接失败
WebSocket和EventSource的区别
程序员必看的经典书籍推荐
AutoUpdater.NET实现.NET应用自动更新
TinyMCE 富文本编辑器常用菜单设置
相关帖子
WebSocketException (0x80004005): The remote party closed the WebSocket connection without completing
网速慢怎么办?10 个实用优化方法提升网络速度
任天堂3DS游戏资源金手指模拟器CIA和CCI格式下载 推荐50款最热门的好玩的游戏列表
2025年最值得购买的 6 款便宜又好用的外网加速器推荐
魔兽plus探索服40级前最强绿装获取方法
联想昭阳e42-80笔记本关闭自动Fn功能键
免费 .NET + MSSQL 主机推荐:2025年最佳免费托管方案详解
.com和.net域名哪个更好?