热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络编程语言c语言_重新思考编程:语言网络

网络编程语言c语言随着微服务架构的出现,通过使用大量较小的程序来开发应用程序。这些程序是单独构建的,并已部署到可以独立扩展的平台中。这些程序通过简单的应

网络编程语言c语言

随着微服务架构的出现,通过使用大量较小的程序来开发应用程序。 这些程序是单独构建的,并已部署到可以独立扩展的平台中。 这些程序通过简单的应用程序编程接口(API)通过网络相互通信。 由于这些应用程序具有分解和网络分布式的性质,因此开发人员必须将分布式计算的谬误作为其应用程序逻辑的一部分来处理。

数十年来,编程语言一直将网络简单地视为I / O源。 因此,为了公开简单的API,开发人员必须通过编写一个等待网络请求直到获得信号的显式循环来实现这些服务。 要使用这些API,在客户端,开发人员必须实现不同的弹性技术,例如重试,故障转移和负载平衡,以应对不可靠的网络行为。

Ballerina是一种开放源代码编程语言,它引入了客户端对象,服务,资源功能和侦听器的基本的,新的抽象,以将网络纳入该语言。 开发人员可以使用语言提供的构造来编写这些网络程序,并且可以正常工作。

服务

Ballerina介绍了服务类型化,其中服务可以具有一种或多种实现应用程序逻辑的资源方法。 服务可以与侦听器对象一起使用。 侦听器对象提供网络和服务之间的接口。 它根据定义的协议从远程进程接收网络消息,并将其转换为对已附加到侦听器对象的服务的资源方法的调用。 HTTP / HTTPS,HTTP2,gRPC和WebSocket是侦听器对象中现成支持的某些协议。

以下代码说明了一个具有sayHello资源方法的hello服务,该方法返回“ Hello World!”。

import ballerina/http;
import ballerina/log;listener http:Listener helloWorldEP = new ( 9090 );service hello on helloWorldEP {resource function sayHello (http:Caller caller,
http:Request request)
{var result = caller->respond( "Hello World!" );if (result is error) {log:printError( "Error in responding " , err = result);}}
}

Ballerina源文件可以编译成可执行jar。

$ ballerina build hello.bal
Compiling sourcehello.bal
Generating executablesHello.jar
$ java -jar hello.jar
[ballerina/http] started HTTP/WS listener 0.0.0.0:9090
$ curl http://localhost:9090/hello/sayHello
Hello, World!

Ballerina服务带有内置并发。 对资源方法的每个请求都在一个单独的链(Ballerina并发单元)中处理,并且将隐式的并发行为提供给服务。

以下示例芭蕾舞演员(BBE)在侦听器对象中显示了不同的协议支持:

  • HTTPS
  • WebSocket升级
  • HTTP 2.0
  • gRPC

异步网络协议

在请求-响应范例中,网络通信是通过阻止呼叫来完成的。 但是阻止线程进行网络调用非常昂贵。 因此,编程语言支持asyncio,并且开发人员必须使用基于回调的代码技术来实现async / await。 Ballerina请求-响应协议是开箱即用的非阻塞协议,在Ballerina协议实现的底层将负责异步调用。 以下代码片段显示了对简单HTTP GET请求端点的调用,其中Ballerina HTTP客户端协议实现将处理底层调用的非阻塞性质。

import ballerina/http;
import ballerina/io;http:Client clientEndpoint = new ( "http://postman-echo.com" );public function main () {var response = clientEndpoint->get( "/get?test=123" );if (response is http:Response) {// logic for handle response} else {io :println( "Error when calling the backend: " , response.reason());}
}

客户对象

客户端对象是一个存根,它允许工作人员根据某种协议将网络消息发送到远程进程。 客户端对象的远程方法对应于协议定义的针对客户端对象所扮演角色的不同网络消息。

以下示例说明了通过在twitter客户端对象中调用tweet远程方法来发送tweet。

import ballerina/config;
import ballerina/log;
import wso2/twitter;// Twitter package defines this type of endpoint
// that incorporates the twitter API.
// We need to initialize it with OAuth data from apps.twitter.com.
// Instead of providing this confidential data in the code
// we read it from a toml file.
twitter:Client twitterClient = new ({clientId : config:getAsString( "clientId" ),clientSecret : config:getAsString( "clientSecret" ),accessToken : config:getAsString( "accessToken" ),accessTokenSecret : config:getAsString( "accessTokenSecret" ),clientConfig : {}
});public function main () {twitter:Status|error status &#61; twitterClient->tweet( "Hello World!" );if (status is error) {log :printError( "Tweet Failed" , status);} else {log :printInfo( "Tweeted: " &#43; <&#64;untainted > status.id.toString());}
}

程序通过使用客户端对象&#xff08;twitterClient&#xff09;中定义的协议调用远程方法&#xff08;tweet&#xff09;来发送消息。 返回值&#xff08;twitter&#xff1a;Status&#xff09;对应于协议的响应。

顺序图

序列图是可视化描述服务交互方式的最佳方法。 这是设计用于并行和网络交互的Ballerina语言抽象的语法和语义的基础&#xff0c;以便它与序列图紧密对应。 在Ballerina中&#xff0c;使用与非远程方法不同的语法&#xff08;->&#xff09;调用远程方法&#xff0c;并在序列图中将其描述为从工作人员生命线到客户对象生命线的水平箭头。

此外&#xff0c;这是Ballerina语法中代码的文本表示形式和序列图形式的可视表示形式之间的双向映射。 Ballerina IDE插件&#xff08;例如VSCode插件 &#xff09;可以从源代码动态生成序列图。

下图是从Salesforce集成的示例微服务生成的。

弹性

由于网络的不可靠特性&#xff0c;需要以处理故障的方式编写网络程序。 有时&#xff0c;自动重试将有助于从此类故障中恢复。 在某些情况下&#xff0c;故障转移技术将有助于实现不间断的服务交付。 此外&#xff0c;断路器等技术还有助于防止跨多个程序的灾难性级联故障&#xff0c;并有助于恢复故障程序。 诸如断路器&#xff0c;负载平衡&#xff0c;故障转移&#xff0c;重试和超时之类的弹性技术在Ballerina的客户端对象中是开箱即用的。

以下代码片段显示了如何配置断路器以处理Ballerina HTTP客户端对象中与网络相关的错误。

http:Client backendClientEP &#61;new ( "http://localhost:8080" , {circuitBreaker: {rollingWindow: {timeWindowInMillis: 10000 ,bucketSizeInMillis: 2000 ,requestVolumeThreshold: 0},failureThreshold: 0.2 ,resetTimeInMillis: 10000 ,statusCodes: [ 400 , 404 , 500 ]},timeoutInMillis: 2000});

以下BBE展示了Ballerina在不同弹性技术支持下的工作样本。

  • 断路器
  • 负载均衡
  • 故障转移
  • 重试
  • 超时

错误处理

由于网络固有的不可靠性&#xff0c;错误是网络编程的预期部分。 Ballerina的方法是显式检查错误&#xff0c;而不是将其视为异常。 通过设计来忽略错误几乎是不可能的。 Ballerina具有内置的错误类型&#xff0c;该错误类型具有两个组成部分&#xff1a;一个字符串&#xff0c;用于标识错误原因&#xff1b;一个映射&#xff0c;用于提供有关该错误的其他详细信息。

让我们以上面讨论的相同的tweet示例为例。

twitter:Status|error status &#61; twitterClient->tweet("Hello World!" );if (status is error) {log :printError( "Tweet Failed" , status);} else {log :printInfo( "Tweeted: " &#43; <&#64;untainted > status.id.toString());}

tweet远程方法可以返回预期的twitter&#xff1a;Status值或由于网络不可靠而导致的错误。 Ballerina支持联合类型&#xff0c;因此状态变量可以是twitter&#xff1a;Status或错误类型。 上面的代码段显示了如何显式检查错误。 Ballerina IDE工具还支持类型保护&#xff0c;它可指导开发人员在if-else块中正确处理错误和值。

以下BBE演示了Ballerina中全面的错误处理功能。

  • 错误处理
  • 检查一下
  • 恐慌
  • 检查恐慌
  • 陷阱
  • 用户定义的错误类型

网络数据安全

分布式系统通过在不同组件之间共享数据来工作。 网络安全起着至关重要的作用&#xff0c;因为所有这些通信都是通过网络进行的。 Ballerina提供了内置的库来实现传输级安全性&#xff0c;并提供加密库来保护数据。 以下BBE显示了Ballerina的加密操作支持。

  • 密码运算

身份和访问管理在基于微服务的应用程序中扮演着至关重要的角色。 通常&#xff0c;对于初始登录&#xff0c;通常用户提供用户名/ ID和密码。 但是在随后的访问中&#xff0c;COOKIE或随机令牌被用作身份证明。 Ballerina通过使用基本身份验证&#xff0c;OAuth和JWT支持对服务以及客户端的开箱即用保护。 以下BBE显示了如何通过执行授权来保护服务和客户端。

  • JWT提供的安全服务
  • 使用基本身份验证的安全服务
  • 使用OAuth2的安全服务
  • 具有基本身份验证的受保护客户端
  • 具有JWT Auth的受保护客户端
  • 使用OAuth2的受保护客户端

Ballerina http&#xff1a;Listener和http&#xff1a;Client具有开箱即用的支持&#xff0c;可通过OCSP&#xff08;在线证书状态协议&#xff09;装订&#xff0c;OCSP和CRL来验证证书吊销。 Ballerina侦听器和客户端对象支持网络编程中所需的所有主要功能&#xff0c;以实现网络通信的端到端保护。

除此之外&#xff0c;Ballerina在其编译器中还具有内置的污染分析仪。 污染分析旨在通过防止任何可由用户输入修改的变量来提高安全性。 如果未正确检查&#xff0c;所有用户输入都可能很危险。 污点分析机制的结果是&#xff0c;Ballerina编译器通过观察污点数据如何在程序中传播来识别不受信任&#xff08;污点&#xff09;的数据。

如果将不受信任的数据传递给安全敏感的参数&#xff0c;则会生成编译器错误。 由于污点检查发生在编译器阶段&#xff0c;因此程序员可以重新设计程序&#xff0c;以在危险输入周围建立安全墙。 以下BBE显示了对Ballerina的支持。

  • 污染检查

默认情况下的可观察性

较小程序的数量增加意味着调试问题将变得更加困难&#xff0c;并且需要付出额外的努力才能在所有分布式程序上启用可观察性。 监视&#xff0c;日志记录和分布式跟踪是揭示系统内部状态并提供可观察性的关键方法。 通过这三种方法将自己暴露在各种外部系统中&#xff0c;Ballerina可以完全观察到。

这有助于监视指标&#xff0c;例如请求计数和响应时间统计信息&#xff0c;分析日志以及执行分布式跟踪。 可以在以下指南中找到有关Ballerina可观察性的更多见解&#xff1a;

  • 如何观察Ballerina的服务

即将推出的功能

Ballerina的目标是成为一种编程语言和一个平台&#xff0c;通过共同设计&#xff0c;以使企业集成更加简单&#xff0c;敏捷和DevOps友好&#xff0c;除了期望的通用功能之外&#xff0c;还包括云本机和中间件抽象。

在不久的将来&#xff0c;将通过增加对事务的支持来增强该语言的网络方面&#xff0c;这些事务包括Ballerina程序之间的分布式事务&#xff0c;流查询和锁定。

重要要点

  • 数十年来&#xff0c;编程语言一直将网络简单地视为I / O源。
  • Ballerina是一种运行在JVM之上的开源编程语言&#xff0c;它使用客户端对象和远程方法&#xff0c;服务和资源方法以及侦听器对网络交互进行建模&#xff0c;从而为该语言带来了不同的网络方面。
  • 诸如具有内置并发性的服务之类的更高级别的类型可帮助开发人员编写服务&#xff0c;并且这种服务可以正常工作。
  • 完全异步的网络协议库提供了简化的无阻塞编程体验。
  • 语言的语法和语义共同设计为在代码的文本表示形式和可视化表示形式的顺序图之间具有双向映射。 这样可以免费提供网络交互图。
  • 网络程序需要以处理故障的方式编写。 诸如断路器&#xff0c;负载平衡&#xff0c;故障转移&#xff0c;重试和超时之类的弹性技术在Ballerina的客户端对象中是开箱即用的。
  • 由于网络固有的不可靠性&#xff0c;错误是网络编程的预期部分。 Ballerina的方法是显式检查错误&#xff0c;而不是将其视为异常。
  • 如果未正确检查&#xff0c;所有用户输入都可能很危险。 Ballerina的异味分析机制可帮助开发人员编写不太容易被黑客入侵的客户端和服务。
  • 默认情况下&#xff0c;Ballerina通过监视&#xff0c;记录日志以及对各种外部系统的分布式跟踪来公开自身&#xff0c;从而支持可观察性。 这有助于监视度量标准&#xff0c;例如请求计数和响应时间统计信息&#xff0c;分析日志以及执行分布式跟踪。
  • 即将发布的功能&#xff08;如分布式协调&#xff0c;流查询和锁定&#xff09;将增强该语言的网络方面。

翻译自: https://hackernoon.com/rethinking-programming-the-network-in-the-language-kn3z3y55

网络编程语言c语言



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
author-avatar
绿香源酥脆冬枣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有