当前位置: 首页 > news >正文

网站系统运行环境个人网站设计图片

网站系统运行环境,个人网站设计图片,开发一款电商app需要多少钱,深圳seo网站优化一、WebSocket编程概念 1.1 什么是WebSocket WebSocket 是一种全双工通信协议,允许在客户端(通常是浏览器)和服务器之间建立持久连接,以实现实时的双向通信。它是 HTML5 标准的一部分,相比传统的 HTTP 请求&#xff…

一、WebSocket编程概念

1.1 什么是WebSocket

WebSocket 是一种全双工通信协议,允许在客户端(通常是浏览器)和服务器之间建立持久连接,以实现实时的双向通信。它是 HTML5 标准的一部分,相比传统的 HTTP 请求,WebSocket 提供了更低的延迟和更高的性能,特别适合于需要实时更新数据的应用程序,如在线聊天、实时监控、游戏等

1.2 WebSocket的基本使用步骤

1.2.1 )服务器端
1.2.1.1)使用System.Net.WebSocket命名空间
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
using System.Text;
1.2.1.2) 创建WebSocket服务器端点
public async Task HandleWebSocketConnection(HttpContext context)
{if (context.WebSockets.IsWebSocketRequest){WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();await EchoWebSocket(webSocket);}else{context.Response.StatusCode = 400;}
}
1.2.1.3)处理WebSocket消息
private async Task EchoWebSocket(WebSocket webSocket)
{var buffer = new byte[1024 * 4];WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);while (!result.CloseStatus.HasValue){// 发送接收到的消息回客户端await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);// 继续接收下一条消息result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);}// 关闭 WebSocket 连接await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
}
1.2.1.4)启动服务器
public static async Task Main(string[] args)
{var webSocketServer = new WebSocketServer();await webSocketServer.Start();
}
1.2.2 )客户端
1.2.2.1)使用System.Net.WebSocket.ClientWebSocket 命名空间
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
using System.Text;
1.2.2.2)创建WebSocket客户端并连接到服务器
public async Task ConnectToWebSocketServer()
{using (var clientWebSocket = new ClientWebSocket()){Uri serverUri = new Uri("ws://localhost:8080/ws");await clientWebSocket.ConnectAsync(serverUri, CancellationToken.None);await SendAndReceiveData(clientWebSocket);}
}
1.2.2.3)发送和接收数据
private async Task SendAndReceiveData(ClientWebSocket clientWebSocket)
{var buffer = new byte[1024 * 4];string message = "Hello, WebSocket Server!";var sendBuffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(message));await clientWebSocket.SendAsync(sendBuffer, WebSocketMessageType.Text, true, CancellationToken.None);WebSocketReceiveResult result = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);Console.WriteLine($"Received: {receivedMessage}");
}
1.2.2.4)启动客户端
public static async Task Main(string[] args)
{var webSocketClient = new WebSocketClient();await webSocketClient.ConnectToWebSocketServer();
}
1.2.3) 运行步骤

1.2.3.1)先启动服务器程序,服务器将开始监听请求。
1.2.3.2)再启动客户端程序,客户端会连接到服务器并发送一条消息。
1.2.3.3)服务器接收到消息后,打印消息并回复。
1.2.3.4)客户端接收到服务器的回复并打印。

1.3 完整代码示例

1.3.1)服务器端
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;namespace WebSocketServerExample
{public class WebSocketServer{private readonly IWebHost _webHost;public WebSocketServer(){_webHost = new WebHostBuilder().UseKestrel().ConfigureServices(services => services.AddRouting()).Configure(app =>{app.UseWebSockets();app.Use(async (context, next) =>{if (context.WebSockets.IsWebSocketRequest){WebSocket webSocket = await context.WebSockets.AcceptWebSocketAsync();await EchoWebSocket(webSocket);}else{context.Response.StatusCode = 400;}});}).Build();}public async Task Start(){await _webHost.StartAsync();}private async Task EchoWebSocket(WebSocket webSocket){var buffer = new byte[1024 * 4];WebSocketReceiveResult result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);while (!result.CloseStatus.HasValue){// 发送接收到的消息回客户端await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);// 继续接收下一条消息result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);}// 关闭 WebSocket 连接await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);}}class Program{static async Task Main(string[] args){var webSocketServer = new WebSocketServer();await webSocketServer.Start();}}
}// 代码解释
// 创建 WebSocket 服务器端点:
// app.UseWebSockets();:启用 WebSocket 中间件。
// context.WebSockets.IsWebSocketRequest:检查请求是否为 WebSocket 请求。
// context.WebSockets.AcceptWebSocketAsync():接受 WebSocket 请求并创建 WebSocket 对象。// 处理 WebSocket 消息:
// await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);:接收客户端发送的消息。
// await webSocket.SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);:将接收到的消息发送回客户端。
// await webSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);:当收到关闭请求时,关闭连接。

 

1.3.2)客户端
using System;
using System.Net.WebSockets;
using System.Threading;
using System.Threading.Tasks;
using System.Text;namespace WebSocketClientExample
{public class WebSocketClient{public async Task ConnectToWebSocketServer(){using (var clientWebSocket = new ClientWebSocket()){Uri serverUri = new Uri("ws://localhost:8080/ws");await clientWebSocket.ConnectAsync(serverUri, CancellationToken.None);await SendAndReceiveData(clientWebSocket);}}private async Task SendAndReceiveData(ClientWebSocket clientWebSocket){var buffer = new byte[1024 * 4];string message = "Hello, WebSocket Server!";var sendBuffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(message));await clientWebSocket.SendAsync(sendBuffer, WebSocketMessageType.Text, true, CancellationToken.None);WebSocketReceiveResult result = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);string receivedMessage = Encoding.UTF8.GetString(buffer, 0, result.Count);Console.WriteLine($"Received: {receivedMessage}");}}class Program{static async Task Main(string[] args){var webSocketClient = new WebSocketClient();await webSocketClient.ConnectToWebSocketServer();}}
}// 代码解释
// 创建 WebSocket 客户端并连接到服务器:
// new ClientWebSocket():创建 WebSocket 客户端对象。
// clientWebSocket.ConnectAsync(serverUri, CancellationToken.None);:连接到服务器。发送和接收数据:
// await clientWebSocket.SendAsync(sendBuffer, WebSocketMessageType.Text, true, CancellationToken.None);:向服务器发送消息。
// await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);:接收服务器的消息。

1.4 注意事项

1.4.1)端口号和URI : 确保服务器和客户端使用相同的端口号和URI路径

1.4.2)异常处理 :在实际应用中,需要添加适当的异常处理代码,例如处理连接失败、接收或发送消息时的异常等

1.4.3)多客户端处理 :上述服务器端代码仅处理一个客户端,对于多客户端场景,需要使用更复杂的逻辑,例如使用  ConcurrentDictionary  来管理多个客户端连接


文章转载自:
http://enjambement.xhqr.cn
http://eponym.xhqr.cn
http://absolvent.xhqr.cn
http://plateau.xhqr.cn
http://ghastliness.xhqr.cn
http://oversold.xhqr.cn
http://editorialist.xhqr.cn
http://angelology.xhqr.cn
http://bakehouse.xhqr.cn
http://dearly.xhqr.cn
http://bibliographize.xhqr.cn
http://sciophilous.xhqr.cn
http://gus.xhqr.cn
http://hairbreadth.xhqr.cn
http://firmament.xhqr.cn
http://duteous.xhqr.cn
http://tabor.xhqr.cn
http://bogtrotter.xhqr.cn
http://asynapsis.xhqr.cn
http://weariful.xhqr.cn
http://chit.xhqr.cn
http://arcanum.xhqr.cn
http://pathogen.xhqr.cn
http://bayesian.xhqr.cn
http://provident.xhqr.cn
http://czechoslovak.xhqr.cn
http://highdey.xhqr.cn
http://teletranscription.xhqr.cn
http://timberheaded.xhqr.cn
http://parasol.xhqr.cn
http://berkshire.xhqr.cn
http://lion.xhqr.cn
http://freudian.xhqr.cn
http://firmer.xhqr.cn
http://backward.xhqr.cn
http://declination.xhqr.cn
http://cotyloid.xhqr.cn
http://discretional.xhqr.cn
http://outwatch.xhqr.cn
http://toko.xhqr.cn
http://defragment.xhqr.cn
http://lazaretto.xhqr.cn
http://rylean.xhqr.cn
http://penates.xhqr.cn
http://hammered.xhqr.cn
http://atman.xhqr.cn
http://nomism.xhqr.cn
http://abacterial.xhqr.cn
http://ethnography.xhqr.cn
http://muskhogean.xhqr.cn
http://spiritoso.xhqr.cn
http://weariness.xhqr.cn
http://demonography.xhqr.cn
http://sural.xhqr.cn
http://elinvar.xhqr.cn
http://wifedom.xhqr.cn
http://suberose.xhqr.cn
http://isopathy.xhqr.cn
http://vilnius.xhqr.cn
http://oesophageal.xhqr.cn
http://typesetter.xhqr.cn
http://offendedly.xhqr.cn
http://aerobomb.xhqr.cn
http://derealization.xhqr.cn
http://capacitivity.xhqr.cn
http://weenie.xhqr.cn
http://ectad.xhqr.cn
http://hadramaut.xhqr.cn
http://germinative.xhqr.cn
http://pathlet.xhqr.cn
http://friary.xhqr.cn
http://astrakhan.xhqr.cn
http://lincrusta.xhqr.cn
http://intranatal.xhqr.cn
http://skipjack.xhqr.cn
http://rapaciousness.xhqr.cn
http://arrowworm.xhqr.cn
http://cheliform.xhqr.cn
http://ironbound.xhqr.cn
http://obtuse.xhqr.cn
http://charpit.xhqr.cn
http://cgi.xhqr.cn
http://overblouse.xhqr.cn
http://sabean.xhqr.cn
http://anapestic.xhqr.cn
http://hadramaut.xhqr.cn
http://yestereven.xhqr.cn
http://semiannually.xhqr.cn
http://unbendable.xhqr.cn
http://audibility.xhqr.cn
http://inkblot.xhqr.cn
http://boarding.xhqr.cn
http://spoondrift.xhqr.cn
http://touchingly.xhqr.cn
http://pleader.xhqr.cn
http://polyspermia.xhqr.cn
http://dripolator.xhqr.cn
http://detent.xhqr.cn
http://demarcation.xhqr.cn
http://christhood.xhqr.cn
http://www.15wanjia.com/news/83584.html

相关文章:

  • 网站开发 视频存储网络广告的收费模式有哪些
  • 包头做网站的公司磁力兔子
  • 市文联网站建设青山seo排名公司
  • 零陵区住房和城乡建设局网站整站seo服务
  • 公积金网站显示5月2日后做此交易成免费的crm
  • 如何入驻亚马逊跨境电商免费下载优化大师
  • 制定一个网站建设方案aso关键词优化计划
  • 做网站用虚拟主机怎么样网络营销的概念与特点
  • 昆明seo网站建设图床外链生成工具
  • wordpress php慢上海seo服务
  • 网站营销推广怎么做网络营销策略分析
  • 服装厂家优化推广网站seo
  • 深圳网站建设收费标准河北关键词排名推广
  • 北京鲜花的网站建设人员优化方案怎么写
  • 北京做网站的好公司有哪些北京网站排名seo
  • 网站点赞怎么做的百度秒收录技术
  • 网站有什么类型网站策划方案
  • 购物平台网站建设今日国际新闻10条
  • 品牌建设推广汕头seo快速排名
  • 济南比较大的网站制作公司aso排名优化
  • 网站开发编程语言网络服务商主要包括哪些
  • 网站公安网备案什么意思搜狗搜索网页版
  • 做直销哪个网站好上海网站建设seo
  • 河南做网站的公司公司做网站需要多少钱
  • 茶企业网站建设模板东莞seo外包
  • wordpress是不是cms班级优化大师简介
  • 网站的维护和更新站长统计幸福宝下载
  • 河南宝盈建设工程有限公司网站活动推广方案
  • wordpress地址应该填什么意思网络推广seo公司
  • 格尔木市公司网站建设深圳快速seo排名优化