鸿蒙开发(NEXT/API 12)【硬件(传感器开发3)】传感器服务

news2024/11/18 13:29:02

场景介绍

当设备需要获取传感器数据时,可以使用sensor模块,例如:通过订阅方向传感器数据感知用户设备当前的朝向,通过订阅计步传感器数据统计用户的步数等。

函数说明

名称描述
OH_Sensor_GetInfos(Sensor_Info **infos, uint32_t *count)获取设备上所有传感器的信息。
OH_Sensor_Subscribe(const Sensor_SubscriptionId *id, const Sensor_SubscriptionAttribute *attribute, const Sensor_Subscriber *subscriber)订阅传感器数据。系统将以指定的频率向用户上报传感器数据。订阅加速度传感器,需要申请ohos.permission.ACCELEROMETER权限;订阅陀螺仪传感器,需要申请ohos.permission.GYROSCOPE权限;订阅计步器相关传感器时,需要申请ohos.permission.ACTIVITY_MOTION权限;订阅与健康相关的传感器时,比如心率传感器需要申请ohos.permission.READ_HEALTH_DATA权限,否则订阅失败;订阅其余传感器不需要申请权限。
OH_Sensor_Unsubscribe(const Sensor_SubscriptionId *id, const Sensor_Subscriber *subscriber)取消订阅传感器数据。取消订阅加速度计传感器,需要申请ohos.permission.ACCELEROMETER权限;取消订阅陀螺仪传感器,需要申请ohos.permission.GYROSCOPE权限;取消订阅计步器相关传感器时,需要申请ohos.permission.ACTIVITY_MOTION权限;取消订阅与健康相关的传感器时,需要申请ohos.permission.READ_HEALTH_DATA权限,否则取消订阅失败。取消订阅其余传感器不需要申请权限。
OH_Sensor_CreateInfos(uint32_t count)用给定的数字创建一个实例数组
OH_Sensor_DestroyInfos(Sensor_Info **sensors, uint32_t count)销毁实例数组并回收内存
OH_SensorInfo_GetName(Sensor_Info *sensor, char *sensorName, uint32_t *length)获取传感器名称。
OH_SensorInfo_GetVendorName(Sensor_Info* sensor, char *vendorName, uint32_t *length)获取传感器的厂商名称。
OH_SensorInfo_GetType(Sensor_Info* sensor, Sensor_Type *sensorType)获取传感器类型。
OH_SensorInfo_GetResolution(Sensor_Info* sensor, float *resolution)获取传感器分辨率。
OH_SensorInfo_GetMinSamplingInterval(Sensor_Info* sensor, int64_t *minSamplingInterval)获取传感器的最小数据上报间隔。
OH_SensorInfo_GetMaxSamplingInterval(Sensor_Info* sensor, int64_t *maxSamplingInterval)获取传感器的最大数据上报间隔时间。
OH_SensorEvent_GetType(Sensor_Event* sensorEvent, Sensor_Type *sensorType)获取传感器类型。
OH_SensorEvent_GetTimestamp(Sensor_Event* sensorEvent, int64_t *timestamp)获取传感器数据的时间戳。
OH_SensorEvent_GetAccuracy(Sensor_Event* sensorEvent, Sensor_Accuracy *accuracy)获取传感器数据的精度。
OH_SensorEvent_GetData(Sensor_Event* sensorEvent, float **data, uint32_t *length)获取传感器数据。数据的长度和内容依赖于监听的传感器类型,传感器上报的数据格式如下:1.SENSOR_TYPE_ACCELEROMETER:data[0]、data[1]、data[2]分别表示设备x、y、z轴的加速度分量,单位m/s²;2.SENSOR_TYPE_GYROSCOPE:data[0]、data[1]、data[2]分别表示设备x、y、z轴的旋转角速度,单位弧度/s;3.SENSOR_TYPE_AMBIENT_LIGHT:data[0]表示环境光强度,单位lux;从API Version 12开始,将返回两个额外的数据,其中data[1]表示色温,单位kelvin;data[2]表示红外亮度,单位cd/m²;4.SENSOR_TYPE_MAGNETIC_FIELD:data[0]、data[1]、data[2]分别表示设备x、y、z轴的地磁分量,单位微特斯拉;5.SENSOR_TYPE_BAROMETER:data[0]表示气压值,单位hPa;6.SENSOR_TYPE_HALL:data[0]表示皮套吸合状态,0表示打开,大于0表示吸附;7.SENSOR_TYPE_PROXIMITY:data[0]表示接近状态,0表示接近,大于0表示远离;8.SENSOR_TYPE_ORIENTATION:data[0]、data[1]、data[2]分别表示设备绕z、x、y轴的角度,单位度;9.SENSOR_TYPE_GRAVITY:data[0]、data[1]、data[2]分别表示设备x、y、z轴的重力加速度分量,单位m/s²;10.SENSOR_TYPE_ROTATION_VECTOR:data[0]、data[1]、data[2]分别表示设备x、y、z轴的旋转角度,单位度,data[3]表示旋转向量元素;11.SENSOR_TYPE_PEDOMETER_DETECTION:data[0]表示计步检测状态,1表示检测到了步数变化;12.SENSOR_TYPE_PEDOMETER:data[0]表示步数;13.SENSOR_TYPE_HEART_RATE:data[0]表示心率数值。
OH_Sensor_CreateSubscriptionId(void)创建一个Sensor_SubscriptionId 实例。
OH_Sensor_DestroySubscriptionId(Sensor_SubscriptionId *id)销毁Sensor_SubscriptionId 实例并回收内存。
OH_SensorSubscriptionId_GetType(Sensor_SubscriptionId *id, Sensor_Type *sensorType)获取传感器类型。
OH_SensorSubscriptionId_SetType(Sensor_SubscriptionId* id, const Sensor_Type sensorType)设置传感器类型。
OH_Sensor_CreateSubscriptionAttribute(void)创建Sensor_SubscriptionAttribute实例。
OH_Sensor_DestroySubscriptionAttribute(Sensor_SubscriptionAttribute *attribute)销毁Sensor_SubscriptionAttribute实例并回收内存。
OH_SensorSubscriptionAttribute_SetSamplingInterval(Sensor_SubscriptionAttribute* attribute, const int64_t samplingInterval)设置传感器数据上报间隔。
OH_SensorSubscriptionAttribute_GetSamplingInterval(Sensor_SubscriptionAttribute* attribute, int64_t *samplingInterval)获取传感器数据上报间隔。
OH_Sensor_CreateSubscriber(void)创建一个Sensor_Subscriber实例。
OH_Sensor_DestroySubscriber(Sensor_Subscriber *subscriber)销毁Sensor_Subscriber实例并回收内存。
OH_SensorSubscriber_SetCallback(Sensor_Subscriber* subscriber, const Sensor_EventCallback callback)设置一个回调函数来上报传感器数据。
OH_SensorSubscriber_GetCallback(Sensor_Subscriber* subscriber, Sensor_EventCallback *callback)获取用于上报传感器数据的回调函数。

开发步骤

开发步骤以加速度传感器为例。

  1. 新建一个Native C++工程。

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 检查是否已经配置相应权限。

"requestPermissions": [
      {
        "name": "ohos.permission.ACCELEROMETER",
      },
    ]
  1. CMakeLists.txt文件中引入动态依赖库。
target_link_libraries(entry PUBLIC libace_napi.z.so)
target_link_libraries(entry PUBLIC libhilog_ndk.z.so)
target_link_libraries(entry PUBLIC libohsensor.so)
  1. 导入模块。
#include "sensors/oh_sensor.h"
#include "napi/native_api.h"
#include "hilog/log.h"
#include <thread>
  1. 定义常量。
const int GLOBAL_RESMGR = 0xFF00;
const char *TAG = "[Sensor]";
constexpr Sensor_Type SENSOR_ID { SENSOR_TYPE_ACCELEROMETER };
constexpr uint32_t SENSOR_NAME_LENGTH_MAX = 64;
constexpr int64_t SENSOR_SAMPLE_PERIOD = 200000000;
constexpr int32_t SLEEP_TIME_MS = 1000;
constexpr int64_t INVALID_VALUE = -1;
constexpr float INVALID_RESOLUTION = -1.0F;
Sensor_Subscriber *g_user = nullptr;
  1. 定义一个回调函数用来接收传感器数据。
void SensorDataCallbackImpl(Sensor_Event *event) {
    if (event == nullptr) {
        OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, TAG, "event is null");
        return;
    }
    int64_t timestamp = INVALID_VALUE;
    int32_t ret = OH_SensorEvent_GetTimestamp(event, &timestamp); // 获取传感器数据的时间戳。
    if (ret != SENSOR_SUCCESS) {
        return;
    }
    Sensor_Type sensorType;
    ret = OH_SensorEvent_GetType(event, &sensorType); // 获取传感器类型。
    if (ret != SENSOR_SUCCESS) {
        return;
    }
    Sensor_Accuracy accuracy = SENSOR_ACCURACY_UNRELIABLE;
    ret = OH_SensorEvent_GetAccuracy(event, &accuracy); // 获取传感器数据的精度。
    if (ret != SENSOR_SUCCESS) {
        return;
    }
    float *data = nullptr;
    uint32_t length = 0;
    ret = OH_SensorEvent_GetData(event, &data, &length); // 获取传感器数据。
    if (ret != SENSOR_SUCCESS) {
        return;
    }
    OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, TAG, "sensorType:%{public}d, dataLen:%{public}d, accuracy:%{public}d", sensorType, length, accuracy);
    for (uint32_t i = 0; i < length; ++i) {
        OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, TAG, "data[%{public}d]:%{public}f", i, data[i]);
    }
}
  1. 获取设备上所有传感器的信息。
static napi_value GetSensorInfos(napi_env env, napi_callback_info info)
{
    uint32_t count = 0;
    int32_t ret = OH_Sensor_GetInfos(nullptr, &count); // 获取设备上所有传感器的个数。 
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }
    Sensor_Info **sensors = OH_Sensor_CreateInfos(count); // 用给定的数字创建一个实例数组。
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }        
    ret = OH_Sensor_GetInfos(sensors, &count); // 获取设备上所有传感器的信息。 
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }
    for (uint32_t i = 0; i < count; ++i) {
        char sensorName[SENSOR_NAME_LENGTH_MAX] = {};
        uint32_t length = SENSOR_NAME_LENGTH_MAX;
        ret = OH_SensorInfo_GetName(sensors[i], sensorName, &length); // 获取传感器名称。
        if (ret != SENSOR_SUCCESS) {
            return nullptr;
        }
        char vendorName[SENSOR_NAME_LENGTH_MAX] = {};
        length = SENSOR_NAME_LENGTH_MAX;
        ret = OH_SensorInfo_GetVendorName(sensors[i], vendorName, &length); // 获取传感器的厂商名称。
        if (ret != SENSOR_SUCCESS) {
            return nullptr;
        }
        Sensor_Type sensorType;
        ret = OH_SensorInfo_GetType(sensors[i], &sensorType); // 获取传感器类型。
        if (ret != SENSOR_SUCCESS) {
            return nullptr;
        }
        float resolution = INVALID_RESOLUTION;
        ret = OH_SensorInfo_GetResolution(sensors[i], &resolution); // 获取传感器分辨率。
        if (ret != SENSOR_SUCCESS) {
            return nullptr;
        }
        int64_t minSamplePeriod = INVALID_VALUE;
        ret = OH_SensorInfo_GetMinSamplingInterval(sensors[i], &minSamplePeriod); // 获取传感器的最小数据上报间隔。
        if (ret != SENSOR_SUCCESS) {
            return nullptr;
        }
        int64_t maxSamplePeriod = INVALID_VALUE;
        ret = OH_SensorInfo_GetMaxSamplingInterval(sensors[i], &maxSamplePeriod); // 获取传感器的最大数据上报间隔时间。
        if (ret != SENSOR_SUCCESS) {
            return nullptr;
        }
    }
    OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, TAG, "GetSensorInfos sucessful");
    ret = OH_Sensor_DestroyInfos(sensors, count); // 销毁实例数组并回收内存。
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }
}
  1. 订阅和取消订阅传感器数据。
static napi_value Subscriber(napi_env env, napi_callback_info info)
{
    g_user = OH_Sensor_CreateSubscriber();                                         // 创建一个Sensor_Subscriber实例。
    int32_t ret = OH_SensorSubscriber_SetCallback(g_user, SensorDataCallbackImpl); // 设置一个回调函数来报告传感器数据。
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }

    Sensor_SubscriptionId *id = OH_Sensor_CreateSubscriptionId(); // 创建一个Sensor_SubscriptionId实例。
    ret = OH_SensorSubscriptionId_SetType(id, SENSOR_ID);         // 设置传感器类型。
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }

    Sensor_SubscriptionAttribute *attr = OH_Sensor_CreateSubscriptionAttribute();     // 创建Sensor_SubscriptionAttribute实例。
    ret = OH_SensorSubscriptionAttribute_SetSamplingInterval(attr, SENSOR_SAMPLE_PERIOD); // 设置传感器数据报告间隔。
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }

    ret = OH_Sensor_Subscribe(id, attr, g_user); // 订阅传感器数据。
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }
    OH_LOG_Print(LOG_APP, LOG_INFO, GLOBAL_RESMGR, TAG, "Subscriber successful");
    std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME_MS));
    ret = OH_Sensor_Unsubscribe(id, g_user); // 取消订阅传感器数据。
    if (ret != SENSOR_SUCCESS) {
        return nullptr;
    }
    if (id != nullptr) {
        OH_Sensor_DestroySubscriptionId(id); // 销毁Sensor_SubscriptionId实例并回收内存。
    }
    if (attr != nullptr) {
        OH_Sensor_DestroySubscriptionAttribute(attr); // 销毁Sensor_SubscriptionAttribute实例并回收内存。
    }
    if (g_user != nullptr) {
        OH_Sensor_DestroySubscriber(g_user); // 销毁Sensor_Subscriber实例并回收内存。
        g_user = nullptr;
    }
}
  1. 在types/libentry路径下index.d.ts文件中引入Napi接口。
export const getSensorInfos: () => number;
export const subscriber: () => number;
  1. 编写Js用例调用接口。

最后呢

很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

在这里插入图片描述

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。

  • 《鸿蒙 (OpenHarmony)开发学习视频》
  • 《鸿蒙生态应用开发V2.0白皮书》
  • 《鸿蒙 (OpenHarmony)开发基础到实战手册》
  • OpenHarmony北向、南向开发环境搭建
  • 《鸿蒙开发基础》
  • 《鸿蒙开发进阶》
  • 《鸿蒙开发实战》

在这里插入图片描述

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿
1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2178543.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算力运力解决方案:构建未来智算新生态

中国联通国际有限公司产品之算力运力解决方案&#xff1a;构建未来智算新生态 在当今这个数据爆炸、技术日新月异的时代&#xff0c;算力已成为推动社会进步和产业升级的关键力量。中国联通国际有限公司紧跟时代步伐&#xff0c;依托其强大的网络资源和深厚的技术积累&#xf…

Linux进程间的通信(四)System-V共享内存

什么是共享内存 共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑内存&#xff0c;共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。 不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空…

深度学习后门攻击分析与实现(二)

前言 在本系列的第一部分中&#xff0c;我们已经掌握了深度学习中的后门攻击的特点以及基础的攻击方式&#xff0c;现在我们在第二部分中首先来学习深度学习后门攻击在传统网络空间安全中的应用。然后再来分析与实现一些颇具特点的深度学习后门攻击方式。 深度学习与网络空间…

Node.js安装Express,Node.js支持Typescript以及Express支持Typescript的步骤

1. Node.js 安装Express 运行如下命令&#xff1a; $ mkdir express-demo $ cd express-demo$ npm install express $ npm install body-parser //(可选)中间件&#xff0c;用于处理 JSON, Raw, Text 和 URL 编码的数据 $ npm install cookie-parser //(可选)通过req.cookies…

怎么用gitee做一个图片仓库,在md文档中用这个图片网络地址,然后显示图片

痛因&#xff1a;我为什么要这样做&#xff0c;呃&#xff0c;我一开始图片都是存本地地址的&#xff0c;放在和这个md文档同级的assets文件夹下面&#xff0c;这样子确实当时很方便&#xff0c;复制粘贴什么也不用管&#xff0c;但是想把这个文档分享给别的人的时候&#xff0…

Windows打开HDF5图像:HDFView软件的下载、安装

本文介绍在Windows电脑中&#xff0c;下载、安装用以查看HDF5图像数据的软件HDFView的方法。 HDF5&#xff08;Hierarchical Data Format 5&#xff09;是一种用于存储和管理大量科学数据的文件格式&#xff0c;其由HDF Group开发和维护&#xff0c;广泛应用于科学计算、工程、…

ESP8266wifi模块的使用

文章目录 概要整体架构流程技术名词解释具体配置过程小结 概要 本文旨在介绍ESP8266,做为客户端 电脑做为服务端&#xff0c;通过TCP/IP协议在同一个局域网下通过WiFi进行数据交互 设备选用 esp8266 软件选择 安信可串口调试助手 网络调试助手 &#xff08;若没有软件可私…

OpenCV threhold()函数

OpenCV threhold()函数的主要用途是将灰度图转换为二值图像,实现灰度图的二值化&#xff0c;在机器视觉中使用频度较高&#xff0c;如尺寸量测&#xff0c;物体识别等。其原型如下&#xff1a; 函数参数&#xff1a; src 输入数组&#xff08;多通道、8 位或 32 位浮点&#xf…

SpringBoot3脚手架

MySpringBootAPI SpringBoot3脚手架&#xff0c;基于SpringBoot3DruidPgSQLMyBatisPlus13FastJSON2Lombok&#xff0c;启动web容器为Undertow(非默认tomcat)&#xff0c;其他的请自行添加和配置。 <java.version>17</java.version> <springboot.version>3.3…

项目集成SpringSecurity框架

目录 项目没集成SpringSecurity框架的实现 项目之前的登录接口 LoginReqVo 接收前端的数据类型 LoginRespVo返回给前端的数据 项目集成SpringSecurity 第一步:导入依赖 第二步:创建security包结构 第三步&#xff1a;实现认证过滤器 第一步&#xff1a;自定义认证过滤器…

Modbus调试工具和源码分享

我们应该知道了学习Modbus协议应该具备主从两个设备才行&#xff0c;但是在学习过程中如果没有真实的物理设备&#xff0c;应该怎么调试呢&#xff1f; 我们可以通过软件工具来模拟主从设备&#xff0c;下面我们推荐几个比较实用的工具。 以下内容包含&#xff1a;实用工具、…

超好用的10款视频剪辑软件,从入门到精通

视频剪辑软件哪款比较好呢&#xff1f;无论是专业制作团队、自媒体创作者&#xff0c;还是家庭用户&#xff0c;一款好用的视频剪辑软件都能极大地提升创作效率和作品质量。以下是十款备受推崇的视频剪辑软件&#xff0c;分别从适用人群、易用程度和功能特点进行介绍。 1.影忆…

揭秘移动硬盘RAW:原因、恢复策略与预防措施

移动硬盘RAW概述 移动硬盘&#xff0c;作为现代数据存储的重要工具&#xff0c;其稳定性与数据安全直接关乎用户的数据资产安全。然而&#xff0c;在使用过程中&#xff0c;不少用户会遇到移动硬盘状态突然变为RAW格式的情况&#xff0c;这往往伴随着数据无法直接访问的困扰。…

1688客服代码怎么做生成悬浮客服代码阿里巴巴国内站1688平台悬浮特效悬浮代码悬浮客服 1688客服代码怎么做生成器软件代码工具制作客服代码阿里巴巴

阿里巴巴国内站1688平台悬浮特效悬浮代码悬浮客服 1688客服代码怎么做生成器软件代码工具制作客服代码阿里巴巴 一秒美工工具

王道-操作系统

3 下列说法正确的是_____ 答案:A 解析: A 正确。如链接文件可以顺序存取,但不能随机存取。连续文件可随机存取,也可顺序存取。 B 错误。一个 FCB 就是一个文件目录项。在引入索引节点后,每个文件的目录项只保留文件名和指向该文件对应的索引节点指针,而索引节点的有关信息…

一书直接讲透自然语言处理《Getting Started with Google BERT_ Build and train》

《Getting Started with Google BERT: Build and Train》是一本面向初学者和中级读者的指南&#xff0c;旨在帮助他们理解和使用Google的BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;模型。BERT是近年来自然语言处理&#xff08;NLP&…

WIFI密码默认显示

文章目录 需求分析遇到问题问题原因解决方案 需求 在进入设置&#xff0c;点击某一个wifi,连接wifi 界面&#xff0c;显示密码默认选中状态&#xff0c;效果如下 分析 在 WiFi密码被输入法挡住 中我们已经分析了整个流程&#xff0c;布局文件和控制中心。 结局系统设置WIFI连…

9.29总结

这星期学了概率和组合数学 这是我觉得的一个有趣的题目&#xff0c;每个人身上都有n-1根绳子&#xff0c;如果组不成稳定三角&#xff0c;那么肯定有两个人相邻两根绳子颜色不一样&#xff0c;那么每两个这样的人就会贡献一个不稳定三角形&#xff0c;所以只要所有三角形减去每…

Linux 进程间通信(共享内存+消息队列)

目录 一.共享内存 1.底层原理和系统接口 a.底层原理 b.系统接口 ① shmget ② shmat ③ shmdt ④ shmctl c.命令行控制指令 2.共享内存的通信特点 a.共享内存间的通信没有任何的同步机制 b.共享内存是所有进程间通信速度最快的 c.共享内存可以提供较大的空间。 3…

网络游戏通信方案概述

弱联网和强联网游戏 长连接和短连接游戏 Socket、Http、FTP 总结