网站推广费用一般多少钱,wordpress 形式,怎么导出wordpress 整个网站,购物类网站建设在之前的文章中已经介绍如何使用Beetlex.XRCP组件进行接口/委托远程调用#xff1b;由于组件BeetleX.XRPC.Clients支持.NETStandard2#xff0c;因此Xamarin同样可以使用它来实现基于接口/委托的数据交互通讯。接下来通过Xamarin实现一个简单的移动程序#xff0c;并通过XRP… 在之前的文章中已经介绍如何使用Beetlex.XRCP组件进行接口/委托远程调用由于组件BeetleX.XRPC.Clients支持.NETStandard2因此Xamarin同样可以使用它来实现基于接口/委托的数据交互通讯。 接下来通过Xamarin实现一个简单的移动程序并通过XRPC的功能基于远程接口调用的方式登陆到服务端然后再通过委托远程调用的方式来相互获取对方的系统和时间信息。服务端定义 服务主要定义一个用户接口并实现登陆方法然后注册一个委托用于返回服务信息和时间给客户端。class Program
{static void Main(string[] args){var builder new HostBuilder().ConfigureServices((hostContext, services) {//开services.UseXRPC(s {s.ServerOptions.LogLevel BeetleX.EventArgs.LogType.Info;s.ServerOptions.DefaultListen.Port 9090;s.ServerOptions.DefaultListen.SSL true;//开启SSLs.ServerOptions.DefaultListen.CertificateFile test.pfx;s.ServerOptions.DefaultListen.CertificatePassword 123456;s.RPCOptions.ParameterFormater new JsonPacket();//default messagepack},s {//绑定一个委托s.AddDelegateFuncTaskstring(() {return Task.FromResult(${Environment.OSVersion} {DateTime.Now});});}, typeof(Program).Assembly);});builder.Build().Run();}
}
//定义登陆接口
public interface IUser
{Taskstring Login(string name, string pwd);
}[Service(typeof(IUser))]
public class HelloImpl : IUser
{//实现登陆方法public Taskstring Login(string name, string pwd){var context XRPCServer.EventToken;GetClientTime(context.Server, context.Session);Console.WriteLine(${name} login at {context.Session.RemoteEndPoint});return ${name} login {DateTime.Now}.ToTask();}//定时从登陆客户端获取系统和时间信息并打印private async Task GetClientTime(XRPCServer server, BeetleX.ISession session){//创建对应session的远程委托代理var action server.DelegateFuncTaskstring(session);while (true){//调用委托var result await action();Console.WriteLine(${result}{session.RemoteEndPoint});await Task.Delay(1000);}}
}
以上服务使用了TLS作为基础安全通讯。启动服务后会显示以下日志客户端定义 Xamarin下使用XRPC只需要引用BeetleX.XRPC.Clients即可引用完成后可以定义XRPCClient对象来进行通讯。public partial class MainPage : ContentPage
{public MainPage(){InitializeComponent();//定义XRPC客户端mClient new BeetleX.XRPC.Clients.XRPCClient(192.168.1.18, 9090, beetlex);mClient.CertificateValidationCallback (s, certificate, chain, sslPolicyErrors) true;mClient.Options.ParameterFormater new JsonPacket();//创建接口远程接口代理mUser mClient.CreateIUser();//定义委托给服务端调用mClient.AddDelegateFuncTaskstring(() {return Task.FromResult(${Environment.OSVersion} {DateTime.Now});});//创建对应服务端的远程委托代理mGetTime mClient.DelegateFuncTaskstring();}private FuncTaskstring mGetTime;private static IUser mUser;private static BeetleX.XRPC.Clients.XRPCClient mClient;private async void Button_Clicked(object sender, EventArgs e){try{if (string.IsNullOrEmpty(userName.Text)){await DisplayAlert(Error, Enter you name!, OK);return;}//登陆var result await mUser.Login(userName.Text, userPwd.Text);this.layoutGrid.IsVisible false;this.cmdLogin.IsVisible false;OnGetTime();}catch (Exception e_){await DisplayAlert(Error, e_.Message, OK);}}private async Task OnGetTime(){try{//定时获取服务和时间信息while (true){var result await mGetTime();txtResult.Text result;await Task.Delay(1000);}}catch (Exception e_){await DisplayAlert(Error, e_.Message, OK);this.layoutGrid.IsVisible true;this.cmdLogin.IsVisible true;}}
}
BeetleX开源跨平台通讯框架(支持TLS)轻松实现高性能:tcp、http、websocket、redis、rpc和网关等服务应用https://beetlex.io如果你想了解某方面的知识或文章可以把想法发送到henryfanmsn.com|adminbeetlex.io