【Xamarin】使用WebSocket开发实时通信应用程序

简介: WebSockets是一种双向通信协议,或TCP连接上的持久通信通道,由许多游戏,具有聊天功能的应用程序和实时应用程序(如股票行情)利用的非常强大的协议。 在这篇博文中,我们将讨论如何构建一个简单的Xamarin聊天室应用程序,该应用程序将利用并连接到ASP.NET Core WebSocket服务。

WebSockets是一种双向通信协议,或TCP连接上的持久通信通道,由许多游戏,具有聊天功能的应用程序和实时应用程序(如股票行情)利用的非常强大的协议。

在这篇博文中,我们将讨论如何构建一个简单的Xamarin聊天室应用程序,该应用程序将利用并连接到ASP.NET Core WebSocket服务。

入门

  1. 从GitHub下载服务器源代码(这里)。
  2. 在您的机器上安装dotnet core 2.0以运行服务器。这里查找说明
  3. 一旦你进入源目录,在终端运行dotnet run。
  4. 访问http://locahosthost:5000 or http://(IP/Hostname):5000, 并确保您在网页上看到简单的聊天(Easy chat)服务消息

构建移动客户端

我们开始创建一个利用共享项目(也可以使用.NET标准库)的空白Xamarin.Forms应用程序,并将其称为EasyChat。我们将在我们的移动应用程序中使用System.Net.WebSockets.Client NuGet包来和服务器进行通信。

一旦创建项目,我们可以使用MainPage.xaml作为一个简单的登录页面,从中我们将导航到聊天室。

接下来,我们可以为聊天室添加一个新页面,ChatPage.xaml,以及一个名为ChatPageViewModel.cs的非常简单的View Model来处理WebSocket的客户端代码。 在这个视图模型中,我们有代码连接到服务器并发送和接收消息。

连接到插座Socket

使用System.Net.WebSockets.ClietWebSocket对象建立连接,此对象将随后用于与服务器通信

 

点击(此处)折叠或打开

  1. var client = new ClientWebSocket();
  2. ...
  3. async void ConnectToServerAsync()
  4. {
  5.     await client.ConnectAsync(new Uri("ws://10.0.2.2:5000"), cts.Token);
  6.     UpdateClientState();
  7.     await Task.Factory.StartNew(async () =>
  8.     {
  9.         while (true)
  10.         {
  11.             await ReadMessage();
  12.         }
  13.     }, cts.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
  14. }

注意我正在使用IP地址10.0.2.2使用ConnectAsync方法连接到服务器。 这是Android模拟器上的默认主机IP,我们不能使用localhost或默认的localhost IP。

在Mac上运行的iOS模拟器允许我们使用localhost,但是在iOS / Android设备上运行时,我们必须使用主机名/ IP地址。

阅读消息

使用服务器打开连接后,我们可以使用ReceiveAsync方法开始监听传入的消息。 在这种情况下,消息是UTF8编码的字节数组; 当我们收到消息时,我们必须将字节转换为可读字符串,并忽略不是文本的任何内容

 

点击(此处)折叠或打开

  1. async Task ReadMessage()
  2. {
  3.     WebSocketReceiveResult result;
  4.     var message = new ArraySegment(new byte[4096]);
  5.     do
  6.     {
  7.         result = await client.ReceiveAsync(message, cts.Token);
  8.         if (result.MessageType != WebSocketMessageType.Text)
  9.             break;
  10.         var messageBytes = message.Skip(message.Offset).Take(result.Count).ToArray();
  11.         string receivedMessage = Encoding.UTF8.GetString(messageBytes);
  12.         Console.WriteLine("Received: {0}", receivedMessage);
  13.     }
  14.     while (!result.EndOfMessage);
  15. }

发送消息

要发送消息,我们首先需要将文本转换为字节数组(使用UTF8编码)并调用SendAsync方法。 另外,SendAsync需要参数来标识消息类型,如果是消息的结尾。

 

点击(此处)折叠或打开

  1. async void SendMessageAsync(string message)
  2. {
  3.     if (!CanSendMessage(message))
  4.         return;
  5.     var byteMessage = Encoding.UTF8.GetBytes(message);
  6.     var segmnet = new ArraySegment(byteMessage);
  7.     await client.SendAsync(segmnet, WebSocketMessageType.Text, true, cts.Token);
  8. }

结束语

在这篇文章中,我们审查了使用Xamarin应用程序中的Web套接字实时连接,接收和发送消息的必要代码。 您可以在MSDN上详细了解可用的API,并在GitHub上下载完整的示例Xamarin.Forms应用程序。 

目录
相关文章
|
4月前
|
网络协议 安全 API
WebSocket、Socket、TCP 和 HTTP 的差别与应用场景
WebSocket、Socket、TCP 和 HTTP 是网络通信中的四大“使者”,各具特色:HTTP 适合短时请求,TCP 稳定可靠,Socket 灵活定制,WebSocket 实现实时双向通信。本文用通俗语言解析它们的区别与应用场景,助你为项目选择最合适的通信方式。
1929 3
|
6月前
|
网络协议 算法 物联网
Go语言的WebSocket与实时通信
本文介绍了 WebSocket 技术及其在 Go 语言中的实现。WebSocket 是一种基于 TCP 的协议,支持客户端与服务器间的持久连接和实时通信,相比传统 HTTP 更高效。文章详细讲解了 WebSocket 的核心概念、Go 语言中的相关库(如 `gorilla/websocket`),以及其实现步骤和应用场景。通过代码示例展示了如何构建 WebSocket 服务器和客户端,并探讨了其在聊天应用、实时更新、游戏和物联网等领域的实际用途。此外,还推荐了相关工具和学习资源,帮助开发者更好地掌握这一技术。
256 3
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
296 1
|
10月前
|
数据挖掘 UED
WebSocket在实时体育比分网站中的应用
WebSocket 在实时体育比分网站中用于实时比分更新、动态赛事信息推送、交互式功能(如即时聊天和投票)、赛程提醒与推送通知、比分预测与数据分析,以及多平台支持。通过持久连接,服务器可即时推送比分变化、球员动态、比赛状态等信息,减少延迟并提升用户体验。同时,WebSocket 支持双向通信,使用户能实时互动,确保跨平台的实时数据同步。
170 10
|
缓存 监控 前端开发
Go 语言中如何集成 WebSocket 与 Socket.IO,实现高效、灵活的实时通信
本文探讨了在 Go 语言中如何集成 WebSocket 与 Socket.IO,实现高效、灵活的实时通信。首先介绍了 WebSocket 和 Socket.IO 的基本概念及其优势,接着详细讲解了 Go 语言中 WebSocket 的实现方法,以及二者集成的重要意义和具体步骤。文章还讨论了集成过程中需要注意的问题,如协议兼容性、消息格式、并发处理等,并提供了实时聊天、数据监控和在线协作工具等应用案例,最后提出了性能优化策略,包括数据压缩、缓存策略和连接管理优化。旨在帮助开发者更好地理解并应用这些技术。
637 3
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
660 1
|
JavaScript 前端开发 测试技术
前端全栈之路Deno篇(五):如何快速创建 WebSocket 服务端应用 + 客户端应用 - 可能是2025最佳的Websocket全栈实时应用框架
本文介绍了如何使用Deno 2.0快速构建WebSocket全栈应用,包括服务端和客户端的创建。通过一个简单的代码示例,展示了Deno在WebSocket实现中的便捷与强大,无需额外依赖,即可轻松搭建具备基本功能的WebSocket应用。Deno 2.0被认为是最佳的WebSocket全栈应用JS运行时,适合全栈开发者学习和使用。
714 7
|
Kubernetes Cloud Native JavaScript
为使用WebSocket构建的双向通信应用带来基于服务网格的全链路灰度
介绍如何使用为基于WebSocket的云原生应用构建全链路灰度方案。
|
前端开发 Java C++
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
本文介绍了在 Spring Boot 3.3 中使用 RSocket 和 WebSocket 实现实时通信的方法。RSocket 是一种高效的网络通信协议,支持多种通信模式,适用于微服务和流式数据传输。WebSocket 则是一种标准协议,支持全双工通信,适合实时数据更新场景。文章通过一个完整的示例,展示了如何配置项目、实现前后端交互和消息传递,并提供了详细的代码示例。通过这些技术,可以大幅提升系统的响应速度和处理效率。
|
监控 小程序 前端开发
小程序全栈开发中的WebSocket实时通信实践
【10月更文挑战第3天】随着移动互联网的发展,小程序因便捷的用户体验和社交传播能力,成为企业拓展业务的新渠道。本文探讨了小程序全栈开发中的WebSocket实时通信实践,包括其实时通信、长连接及双向通信的特点,并通过实时聊天、推送、游戏和监控等功能的实现,展示了WebSocket在小程序中的应用。开发者需注意安全性、性能及兼容性等问题,以保障小程序的稳定运行和用户体验。
263 7