首页 文章 精选 留言 我的

精选列表

搜索[小程序云开发],共10000篇文章
优秀的个人博客,低调大师

润小云解读鸿蒙OS系列(二):分布式软总线之trans_service

trans_service模块依赖于系统OS提供的网络socket服务,向认证模块提供认证通道管理和认证数据的收发;向业务模块提供session管理和基于session的数据收发功能,并且通过GCM模块的加密功能提供收发报文的加解密保护。 初始化的时机 在分布式软总线的设计中,trans_service模块是在authmanager模块中被初始化的,而authmanager模块又被discovery模块初始化,因此设备在向外发布本设备信息的过程中,即完成了这三个相互关联模块的初始化动作。 authmanager模块中存在StartBus()函数,其中,StartListener()函数负责为认证模块提供通道完成初始化,StartSession()函数负责初始化业务的session管理: 认证通信与业务session的实现原理类似,本文中我们以简单一些的认证通信代码为例子,说明典型的处理流程。 初始化入口 – StartListener StartListener()函数的底层存在对应不同版本平台的适配函数,这印证了鸿蒙OS各部分解耦的模块化设计思想,针对不同的硬件设备,组合成最适合该设备的OS。比如创建线程时采用了统一的static void WaitProcess(void)函数,而其内部封装了不同底层API的适配代码。 StartListener()调用InitListenFd()函数完成监听TCP socket的创建和监听,其中IP地址和端口号由上层调用者指定。 如上文所述,AuthCreate()在不同平台上会有不同的实现,在LITEOS_A和Linux平台上, AuthCreate()会调用兼容POSIX的pthread_create()完成线程的创建,线程的入口函数为static void WaitProcess(void)。 监听新连接和数据 – WaitProcess WaitProcess()使用忙等方式,调用select()来监听listenFd和数据g_dataFd的信息,如果监听到有数据可读,则进入ProcessAuthData来处理。 如果发现g_dataFd有异常信息,则将其关闭。其中g_dataFd是由listenFd监听到连接时创建的socket。 处理新连接和数据 - ProcessAuthData 无论是新连接请求,还是已有连接中有数据到来,均会进入本函数。 函数通过FD_ISSET()判断是否是listenFd上存在消息,如果是,则说明当前存在新的连接,这时调用accept()完成链接创建,新创建的socket的fd被存储在g_dataFd中,同时调用g_callback->onConnectEvent通知认证模块有新的连接事件发生,并将新创建的fd和client的IP地址告知认证模块。 与此同时,创建g_dataFd时候需要刷新g_maxFd,以保证在WaitProcess()中的下一次select()操作时中,会监听到g_dataFd上的事件。 如果FD_ISSET()判断出g_dataFd上存在消息,则说明已完成握手的连接向本节点发送了数据,这时函数回调g_callback->onDataEvent(),把控制权返回给调用者,以处理接收到的数据。 回调函数的处理 trans_service模块的使用者设置的回调函数将在存在新连接、和新数据时被调用,比如认证模块通过以下函数完成认证动作:OnConnectEvent()函数中完成对新连接的处理, OnDataEvent()函数中完成对新数据的处理。 业务的session管理 该部分代码负责业务的数据通信,节点通过名称进行通信,对外隐藏了端口信息,代码的实现原理与上面的认证通信类似,针对业务需求增加了如多路通信等方面的实现,这里不再详细分析。

优秀的个人博客,低调大师

volley框架使用小Demo

MainActivity public class MainActivity extends AppCompatActivity { private static final String URL = "https://www.baidu.com/"; private RequestQueue mQueue; // volley的请求队列 @BindView(R.id.volley_get) Button btn; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mQueue = Volley.newRequestQueue(getApplicationContext()); ButterKnife.bind(this); } @OnClick({R.id.volley_get}) public void onClick(View v) { get(); } /** * 创建一个请求,这里我们做一个最简单的通过GET方式请求网页源码的操作。请求成功后打印结果。 */ private void get() { StringRequest request = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() { @Override public void onResponse(String arg0) { //Toast.makeText(getApplicationContext(), arg0, Toast.LENGTH_LONG).show(); textView = (TextView) findViewById(R.id.text); textView.setText(arg0.toString()); //Log.d("onResponse", arg0); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { //Toast.makeText(getApplicationContext(), arg0.toString(), Toast.LENGTH_LONG).show(); textView = (TextView) findViewById(R.id.text); textView.setText(arg0.toString()); } }); mQueue.add(request); } } activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.an.volleytest.MainActivity"> <Button android:id="@+id/volley_get" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="get请求" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" android:id="@+id/text" android:layout_marginTop="25dp" android:layout_below="@+id/volley_get" android:layout_centerHorizontal="true" /> </RelativeLayout> 捕获.PNG 点击按钮 hello world 替换为请求网址的html文件

优秀的个人博客,低调大师

Python的matplotlib小例

今天学习了Python语言的matplotlib库作数据可视化。 import matplotlib.pyplot as plt x_values = list(range(1,6)) y_values = [x**3 for x in x_values] plt.scatter(x_values,y_values,edgecolors='none',s=10) plt.title("Square Numbers",fontsize=24) plt.xlabel("Value",fontsize=14) plt.ylabel("Sauqre of Value",fontsize=14) #设置刻度标记的大小 plt.tick_params(axis='both',which='major',labelsize=14) plt.show() scatter函数用来绘画图表,定义表里的各项元素。 tick_params()函数用来设置刻度,axis表示x轴的刻度。

优秀的个人博客,低调大师

RFID 小标签大革命

从买报纸到看手机新闻,从纸质贺卡到电子贺卡,从普通发票到电子发票,电子化、信息化对印刷包装业冲击很大,但同时,新的机会也在产生。随着工业4.0时代的到来,智能包装将成为未来趋势。 智能亮点纷呈 所谓智能包装,就是在现有包装技术上添加更多的相关信息,并可以采用智能手机、互联网、物联网予以读取,从而使包装具有更大的信息容量。智能包装对消费者来讲,获得了更透明的商品信息;对生产者来讲,提供了一个与消费者直接见面的大容量平台。此外,智能包装在商品防伪技术上也将获得质的突破。 在应用RFID(无线射频识别)技术后,智能包装主要呈现出四大亮点——可视化、效率化、安全化与服务化。其中最重要的是可视化。以前条形码只能一件一件地读取,不可以电子扫描;现在智能包装采用RFID电子标签之后,不论在任何位置,都可以跟中央服务器联网,也可以对生产过程、购买商品的状态进行管理。比如已经配备RFID标签的茅台酒,只需要用带有NFC功能的手机扫描瓶盖,即可实时获取该瓶茅台酒的所有信息。 效率化则主要包括物流作业中仓库的效率化、检查产品、盘货作业的削减和缩短支付时间等。安全化主要针对消费者而言,智能标签可提高商品流通的安全性,防止被盗,加强商品的认证管理。服务化则是对零售批发业而言,RFID电子标签可以提高对顾客的服务水平,促进废品回收。 未来增长可期 RFID进入商业运作之后,可改进库存的准确程度,减少物料输送所需的劳动力和时间,缩短补给的周期,改善需求计划与生产计划,这5方面可以给企业增加70%~90%的收益。而印刷包装业借助RFID则可使原材料的获取和管理均能达到最优效果,加强生产环境下的设备、工具、部门和员工等方面的有效控制管理,增强供应链需求的可预见性。 以上是RFID在生产环节中的运用,贴标机还可以给外包装贴标。实际上,现在更多的包装材料比如瓦楞纸,已经开始在和RFID技术结合,把RFID标签嵌入纸箱里,这也是未来的应用方向。 基于工业互联网、物联网和互联服务的第四次工业革命,将产生大量的大数据流,而这些大数据流能够被搜集和分析用于指导高效、高品质生产。RFID技术为构建智能化的生产系统提供了一种有效、独特的标识工具。无论是设备还是标签,RFID价格都将大幅下降,相对来说,应用RFID已经是个时机,相信智能包装的发展契机将无处不在。 本文转自d1net(转载)

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册