前言

实验目的:掌握开发、测试、发布、调用进程间通信的基本方法、工具和流程,理解独立构件体系结构基本原理、结构和特点。掌握使用当今主流云平台来构建独立构件风格软件的相关开发技能。

背景及要求: 现今,随着软件开发规模的逐渐增大,软件开发的规范准则也随之发生了变化,从最开始只注重程序正确性运行的算法,到现如今注重在整个开发中的架构模式,软件复用性等等质量属性,软件体系结构的规范化与结构化对软件开发的影响越来越大。其中,数据流风格就是软件体系结构风格中一种典型的风格,其高耦合低内聚的特点和构件的独立性使得软件的复用性很高,适用于需要处理源源不断的数据的系统。

[以上说明来自教材以及自己的理解]

现今,越来越多的企业面临着各种各样的数据集成和系统整合的系统需求,掌握开发、测试、发布、调用进程间通信的基本方法、工具和流程显得很重要。在这样的系统需求之下,RPC中间件技术也应运而生,但由于采用RPC同步处理技术,在性能、健壮性、可扩展性上都存在诸多缺点。而基于消息的异步处理模型则采用非阻塞的调用特性,发送者将消息发送给消息服务器,消息服务器在合适的时候再将消息转发给接收者;发送和接收是异步的,发送者无需等待。使用消息中间件作为一个中间层的软件,掌握使用云计算技术来构建独立构件风格的相关技能。

以下题目任意选做一个:

基于 AWS SQS(亚马逊云)或阿里云等简单队列服务的消息中间件,使用 Java,C#或者其他语言分别编写一个发送程序和接收程序(构建两个进程或者程序,一个用于发送消息–发到云端队列,一个用于接收消息–从云端队列订阅下来),实现“点对点”的进程间通信功能。

提示与思考:

AWS 相关基本操作,在另外一个文档中,里面有基本的如何获取 AWS key,以及如何建立

AWS 连接。

前端页面简洁明了,用户体验较好,重点在后台通信机制。

这种消息队列服务是基础性的,AWS 作为商业云平台提供了针对 SQS 的高可用性解决方案。

如果你基于 Kafka 构建消息队列服务,如何确保其高可用性?

相关链接:

AWS .NET API,你可以在该链接找到你想要的类及相关方法 Java API:

SQS 官方文档链接:

基于 AWS SNS(亚马逊云),或阿里云消息推送服务,使用 Java、C#或者其他语言编写一个

发送程序和一个接收程序,实现发布-订阅的选择广播式功能,要求订阅者程序为邮件和 SQS 队列。

发布-订阅模式

基于一款开源 JMS 消息中间件(如 Active MQ、Rabbit MQ、kafaka),使用 Java 编写一个发送程序和接收程序,实现点对点和发布-订阅的选择广播式功能,并进行测试。

JMS 选型参考资料:要求:

程序应具有 GUI,发送程序和接收程序可选择发送和接收方式;

通过对话框可以输入发送消息,接收结果可显示于对话框中。

报告结果中要有对于“点对点”和“发布-订阅”两种模式的比较分析。

实验设计

(给出你的实习内容的设计方案,可根据实际情况调整条目)

系统需求

环境需求:

用户需要在 C:\Users\用户名.aws 目录下设置 credentials 和 config 文件,用以保存自己的 AWS 账号信息。

功能需求:

实现发布-订阅模型,完成一对多的异步消息发送,使用数据流体系风格提高复用性。

质量需求:

在遇到错误指令或者系统内部发生错误后可以显示出来,不会因此导致程序崩溃。

架构设计

图 1 数据流架构设计

接口设计

发布者和发送数据功能之间的接口,仅用来传输数据,发布者无需了解数据以怎样的方式发送出去,只需要发送数据。

发送数据和 AWS 代理之间的接口,仅用来传输数据,发送数据的构件无需了解 AWS 代理如何处理数据,只需要发送数据。

AWS 代理和发送构件之间的接口,仅用来传输数据,发送数据的构件无需了解数据如何发送,只需要将数据传输过去,剩下的无需管理。

接受数据和订阅者之间的接口,数据存储在这里,等用户在线的时候推送到用户眼前。

实验过程

软件实现

首先我将该数据流架构分成了三部分,分别是发布者客户端,AWS代理,以及订阅者客户端。数据从发布者发送,流向AWS代理,最终流向订阅者客户段。每个客户端再分别有向AWS 代理发送数据和向AWS接受数据的功能,由两个客户端分别调用。

客户端:

① 客户端涉及自动登录的步骤,如果没有更新AWS的key的话会导致登录失败,抛出对话框显示错误:

图2 登陆界面

② 登录成功后会显示用户界面,用户界面有文本输入框,发送按钮,邮箱接受按钮,以及 SQS 接受按钮,布局方式如右图所示:

其中,每个功能都有自己对应的构件来执行不同的操作。构件之间并没有直接的联系,之间调用的关系都是通过字符串的传输等方式来进行调用。当点击发送消息后会开启

发送消息线程,消息会

发送到 AWS 代理服务 图 3 用户界面

器,代理服务器再发送给所有订阅者,其中邮箱订阅能够通过 QQ 的提示直接查询到消息,形成同步发送接受的通信。

AWS 代理

AWS代理是在AWS控制台线上完成的,只需要确定主题,连接订阅者,就可以发送数据了。

只要我通过代码访问该AWS上的SNS,传入字符串后,就可以完成分发操作了。

图 4 SNS 界面

SQS 接收端

订阅者(SQS)客户端专门负责接受数据,只需要传入队列的名字就可以查询队列收到的消息,也可以选择删除消息,删除在SQS中所查询到的消息。界面如下图所示:

图 5 SQS 队列接受界面

实验环境

处理器: i7-7700HQ     操作系统:windows10
开发语言:python 实验场景:宿舍 ;3.3 实验步骤     服务器:AWS

首先我分别写出了两个界面,分别对两个界面进行调试,如下图所示:

图 6 三个界面所对应的函数

每个界面我都分别对界面的布局进行了大量的设置(其实个人感觉这些有些多余,不需要特别炫酷的界面,能用就完事了…)

分别测试了界面的按钮功能以及链接亚马逊后的接受和发送功能,都以打印的方式输出在面板上,供以观察是否出现 bug,

如下图所示:

图7 打印出信息

最后分别调试完毕后,将模块通过数据的发送链接起来,再进行微小的错误调试,就完成了。

实验评价

实验结果

本次实验完成了题目 1 和题目 2 的内容,实现了基于管道数据流风格的点对点消息发送和发布订阅者一对多的消息发布,在设计构件的时候尽量实现了构件的独立性,减少与其他构件之间的耦合程度,仅通过数据(即消息字符串)的传输来串联起整个系统。

我所设计的系统类图如下所示:

结果分析

本次实习基本上完成了目标,实现了点对点和发布订阅的异步通信,和学长交流后发现实际中这是一个将异步通信做成同步通信的过程,当发布者发送消息的时候,如果用户刚好在线,那就会收到发布者的消息,如果不在线,也可以等到自己上线后从接收端接受发布给自己的消息。本次实习的订阅者都需要去主动接受消息,实际中应该会有更完善的机制来通知订阅者消息的到达。这就是本次实习略有局限的地方了。

到此这篇关于Python实现一个发送程序和接收程序的文章就介绍到这了,更多相关Python发送程序与接收程序内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python实现一个发送程序和接收程序的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部