精华内容
下载资源
问答
  • 针对广州地铁民用无线通信系统的设计情况,对民用通信系统的功能与应用进行分析介绍, 着重讨论了有源部分,并对现存问题提出改进意见
  • 本书从底层数据结构到顶层架构设计,将数据系统设计精髓娓娓道来。其中宝贵经验无论是对架构师,DBA、还是后端工程师、甚至产品经理都会有帮助。 ​ 这是一本理论结合实践书,书中很多问题,译者在实际场景...
  • 应遵循的是可不用鼠标的原则:应用中的功能只用键盘也应当可以完成,即设计的应用中还应加入一些必要的按钮和菜单项。 但是,许多鼠标的操作,如双击、拖动对象等,并不能简单地用键盘来模拟即可实现。例如在一个列表...
  • 指出目前煤矿安全监控系统应用中存在主要问题是传感器性能、供电不稳定,传输线路易受干扰,系统技术水平有差异,相关标准不完善等;分析了《煤矿安全监控系统升级改造技术方案(征求意见稿)》中关于系统功能、性能、...
  •  本书涵盖了android开发从概念、技术到市场推广应用的全部话题,内容包括:android概览、android应用程序设计精髓、android用户界面设计精髓、常用android api、更多android应用程序设计原则、对外发布你android...
  • 语音信号压缩编码是数字语音...实验结果表明,系统提供话音点到点时延仅为25 ms,而语音质量平均意见MOS值达到4.2,在可懂度和清晰度等性能优异,该系统设计应用于无线移动网、数字多路复用系统和计算机通信系统
  • 在这本独特的书籍中,微服务架构的先驱、Java 开发者社区的意见领袖 Chris Richardson 收集、分类并解释了 44 个架构设计模式,这些模式用来解决诸如服务拆分、事务管理、查询和跨服务通信等难题。 本书将教会你...

    成功地开发基于微服务架构的应用软件,需要掌握一系列全新的架构思想和实践。
    在这本独特的书籍中,微服务架构的先驱、Java 开发者社区的意见领袖 Chris Richardson 收集、分类并解释了 44 个架构设计模式,这些模式用来解决诸如服务拆分、事务管理、查询和跨服务通信等难题。

    本书将教会你如何开发和部署生产级别的微服务架构应用。
    这套宝贵的架构设计模式建立在数十年的分布式系统经验之上,Chris还为开发服务添加了新的模式,并将它们组合成可在真实条件下可靠地扩展和执行的系统。
    本书不仅仅是一个模式目录,还提供了经验驱动的建议,以帮助你设计、实现、测试和部署基于微服务的应用程序。

    本书包含:

    • 如何(以及为什么)
    • 使用微服务架构
    • 服务拆分的策略
    • 事务管理和查询相关的模式
    • 高效的测试策略
    • 包括容器和 Serverless 在内的部署模式
      本书专为熟悉标准企业应用程序架构的开发人员编写,使用 Java 编写所有示例代码。
      豆瓣读书详细介绍

    第一章 逃离单体地狱

    在这里插入图片描述

    第二章 服务的拆分策略在这里插入图片描述

    第三章 微服务架构中的进程通信

    在这里插入图片描述

    第四章 使用Saga管理分布式事务

    在这里插入图片描述

    参考文章:https://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf
    https://zhuanlan.zhihu.com/p/113681224#comments
    https://www.infoq.cn/article/pjEkYmkzhMKafGi6YCri
    https://insights.thoughtworks.cn/from-sandwich-to-hexagon/
    https://livebook.manning.com/book/microservices-patterns/chapter-3/201
    https://www.bilibili.com/read/cv6614945

    展开全文
  • 许多标准的Unix工具都是按这种风格设计的,它们使用shell管道(IPC的一种形式)在程序之间传递信息。  (3) 使用一个包含多个线程的程序,线程之间使用某种IPC。这里仍然使用术语IPC,尽管通信是在线程之间而不是在...
  • 有线电视系统方案.doc

    2021-04-21 17:06:54
    广播电影电视部文件:《关于有线电视现阶段网络技术体制的意见》(修订稿); 3.卫星电视设计规划及技术要求 1)网络技术水准 卫星电视设计应以国家标准规定的指标为依据,目前宜采用750MHz或860MHz邻频传输技术,...
  • 许多标准的Unix工具都是按这种风格设计的,它们使用shell管道(IPC的一种形式)在程序之间传递信息。  (3) 使用一个包含多个线程的程序,线程之间使用某种IPC。这里仍然使用术语IPC,尽管通信是在线程之间而不是在...
  • 本标准规定了物联网智能家居系统架构、平台安全、通信安全、智能终端安全、移动客户端安全等。 本标准适用于物联网智能家居的设计、制造和应用
  • 跟第一版相比,这本书涉及的内容触及操作系统设计的更多方面,而由于笔者的水平实在有限,难免有纰漏甚至错误。如果读者有任何的问题、意见或建议,请登录http://www.osfromscratch.org,让我们共同探讨,共同进步...
  • 跟第一版相比,这本书涉及的内容触及操作系统设计的更多方面,而由于笔者的水平实在有限,难免有纰漏甚至错误。如果读者有任何的问题、意见或建议,请登录http://www.osfromscratch.org,让我们共同探讨,共同进步...
  • 16.购置计算机系统的原则是能够满足管理信息系统设计的要求,并且( ) A.选择最先进的配置 B.具有一定扩充余地 C.价格低廉 D.操作方便 17.对于大型程序设计来说,首先应强调的是( ) A.运行效率 B.可维护性 C.开发...
  • 企业即时通信系统安全性分析与设计[J].网络安全技术与应用,2007,(2) 张效祥.计算机科学技术百科全书.北京:清华大学出版社,1998. 冯博,应群,面向对象Java网络编程[M].北京:清华大学出版社, 2011.20-33. 蒋...
  • Visual C++程序设计:局域网技术

    千次阅读 2008-03-07 18:11:00
    | 18.2 | 局域网技术局域网是由在物理上彼此相隔不远一组台式计算机和其他设备,以允许用户意见相互通信和共享计算机资源方式互连在一起的系统,其特点是传输速率高、误码率低,具有较高稳定性和可扩充性。...

    | 18.2 | 局域网技术

    局域网是由在物理上彼此相隔不远的一组台式计算机和其他设备,以允许用户意见相互通信和共享计算机资源的方式互连在一起的系统,其特点是传输速率高、误码率低,具有较高的稳定性和可扩充性。本节将介绍有关局域网的相关知识。

    18.2.1  获取网卡地址

    在实际的应用程序中,经常需要在程序运行时获取MAC地址作为某种标识。MAC地址是网络适配器的物理地址,网络适配器又称网卡。而MAC地址能够标识网络中一台惟一的计算机,所以网卡的物理地址是惟一的。如果想获得网卡地址可以通过调用Netbios函数来实现。

    下面以一个实例来说明如何获取网卡地址,具体操作步骤如下。

    (1)新建一个基于对话框的应用程序,设计对话框资源如图18.1所示。

    (2)处理“获取”按钮的单击事件,在程序中调用Netbios函数获取网卡地址。

     // 因为是通过NetAPI来获取网卡信息,所以需要包含其题头文件nb30.h #include < nb30.h >
    typedef struct _ASTAT_
    {
    ADAPTER_STATUS adapt;
    NAME_BUFFER NameBuff [30];
    }ASTAT, * PASTAT;

    ASTAT AdaINfo;

    ---- // 定义一个存放返回网卡信息的变量
    ---- // 输入参数:lana_num为网卡编号,一般地,从0开始

    void CGetMACDlg::OnGetmac()

    {

        NCB nInfo;

        memset(&nInfo,0,sizeof(NCB));

        nInfo.ncb_command = NCBRESET;

        nInfo.ncb_lana_num = 0;   //   指定网卡号    

        Netbios(&nInfo);

     

        //初始化NetBIOS

        memset(&nInfo,0,sizeof(NCB));

        nInfo.ncb_command = NCBASTAT;

        nInfo.ncb_lana_num = 0;

        nInfo.ncb_buffer = (unsigned char*)&AdaINfo;

        nInfo.ncb_length = sizeof(ADAPTER_INFO);

        strncpy( (char*)nInfo.ncb_callname,"*",NCBNAMSZ);

        Netbios(&nInfo);   

       

        CString macAddr;

        macAddr.Format("%02X%02X-%02X%02X-%02X%02X",AdaINfo.nStatus.adapter_address[0],

            AdaINfo.nStatus.adapter_address[1],

            AdaINfo.nStatus.adapter_address[2],

            AdaINfo.nStatus.adapter_address[3],

            AdaINfo.nStatus.adapter_address[4],

            AdaINfo.nStatus.adapter_address[5]

            );

        m_MacAddr.SetWindowText(macAddr);

    }

    (3)运行程序,效果如图18.2所示。

          

    图18.1  对话框资源设计窗口                        图18.2  获取网卡地址

    18.2.2  映射网络驱动器

    Windows提供的“映射网络驱动器”命令准许用户在“我的电脑”或“Windows资源管理器”中显示网络资源,这使得网络资源更易于查找。对于经常使用的网络资源或者当准确知道想要连接的网络路径和资源名时,可以使用“映射网络驱动器”。设置“映射网络驱动器”可以根据WNetAddConnection2函数连接到指定的网络资源,并用指定的盘符代表这个连接,再使用WNetAddConnection2函数取消到指定网络资源的连接即可。其中,WNetAddConnection2函数是用于创建同一个网络资源的连接。

    语法:

    DWORD WNetAddConnection2( LPNETRESOURCE lpNetResource,LPCTSTR

    lpPassword,LPCTSTR lpUsername,DWORD dwFlags );

    WNetAddConnection2函数参数说明如表18.2所示。

    表18.2                    WNetAddConnection2函数参数说明

    参 数 名 称

    参 数 说 明

    lpNetResource

    为NETRESOURCE结构指针,标识网络资源

    lpPassword

    可选的一个密码。如为vbNullString,表示采用当前用户的默认密码。如为一个空字串,则不用任何密码

    lpUsername

    用于连接的用户名。如为vbNullString,表示使用当前用户

    dwFlags

    设为零;或指定常数CONNECT_UPDATE_PROFILE,表示创建永久性连接。

    下面根据一个例子来介绍如何使用“映射网络驱动器”命令,具体操作步骤如下。

    *  ch1802实例位置:mr/18/sl/02 

    (1)新建一个基于对话框的应用程序,设计对话框资源如图18.3所示。

    (2)处理“…”按钮单击事件,选择网络目录。

    void CNetDiskDlg::OnBrown()

    {

        UpdateData(TRUE);

        BROWSEINFO bInfo;

        bInfo.hwndOwner = this->m_hWnd;

        bInfo.pidlRoot = NULL;

        bInfo.pszDisplayName = NULL;

        bInfo.lpszTitle = "浏览文件夹";

        bInfo.ulFlags = 0;

        bInfo.lpfn = NULL;

        bInfo.lParam = 0;

        bInfo.iImage = 0;

        //弹出文件浏览对话框

        ITEMIDLIST* pItemList = SHBrowseForFolder(&bInfo);

        CString folderdir ="C://";

        //获取用户选择的目录

        SHGetPathFromIDList(pItemList,folderdir.GetBuffer(0));

        m_Netdir = folderdir;

        UpdateData(FALSE);

    }

    (3)处理“添加”按钮的单击事件,将网络目录映射到本地磁盘。

    void CNetDiskDlg::OnAddnetdisk()

    {

        UpdateData();

        //定义网络资源

        NETRESOURCE nsource;

        nsource.dwScope = RESOURCE_GLOBALNET;

        nsource.dwType =RESOURCETYPE_DISK;

        nsource.dwDisplayType = RESOURCEDISPLAYTYPE_GENERIC;

        nsource.dwUsage = RESOURCEUSAGE_CONNECTABLE;

        nsource.lpLocalName = m_LocalDisk.GetBuffer(0);

        nsource.lpRemoteName = m_Netdir.GetBuffer(0);

        nsource.lpProvider = NULL;

        nsource.lpComment = NULL;

        //添加网络资源

        DWORD ret  =  WNetAddConnection2(&nsource,NULL,NULL,0);

        if (ret==NO_ERROR)

        {

            MessageBox("设置成功");

        }

        else

        {

            MessageBox("设置失败");   

        }

    }

    (4)运行程序,效果如图18.4所示。

                    

    图18.3  资源设计窗口                         图18.4  映射网络驱动器

    18.2.3  获取局域网计算机名称和IP

    在实际的应用程序中,经常需要在程序检索整个局域网络,获取局域网络中的计算机名和IP地址。如果想获得计算机名主要使用了Windows API函数库中的WnetOpenEnum、WnetEnumResource和WnetCloseEnum函数,而在使用这些函数之前,需要初始化向程序中导入mpr.lib库和头文件winnetwk.h;如果想获得计算机IP主要使用了gethostbyname函数,在使用该函数之前,需要导入ws2_32.lib库和头文件afxsock.h。其中各函数的介绍如下:

    (1)WnetOpenEnum函数

    WnetOpenEnum函数用于启动对网络资源进行枚举的过程。

    语法:

    DWORD WnetOpenEnum( DWORD dwScope,DWORD dwType,DWORD dwUsage,

    LPNETRESOURCE lpNetResource,LPHANDLE lphEnum );

    WnetOpenEnum函数参数说明如表18.3所示。

    表18.3                       WnetOpenEnum函数参数说明

    参 数 名 称

    参 数 说 明

    DwScope

    表示网络枚举的范围

    DwType

    表示枚举的资源类型

    DwUsage

    表示枚举资源的用法

    LpNetResource

    用于返回网络资源信息

    LphEnum

    表示枚举的资源句柄指针

    (2)WnetEnumResource函数

    WnetEnumResource函数用于枚举网络资源。

    语法:

    DWORD WnetEnumResource( HANDLE hEnum,LPDWORD lpcCount,LPVOID lpBuffer

    ,LPDWORD lpBufferSize );

    WnetEnumResource函数参数说明如表18.4所示。

    表18.4                     WnetEnumResource函数参数说明

    参 数 名 称

    参 数 说 明

    hEnum

    由WnetOpenEnum函数的参数lphEnum传入,表示枚举的资源句柄

    lpcCount

    用来决定获取的资源数目最大值

    lpBuffer

    向枚举结果存放的缓冲区地址

    lpBufferSize

    指向枚举结果存储缓冲区大小的变量地址

    (3)WnetCloseEnum函数

    WnetCloseEnum函数用于结束一次枚举操作。

    语法:

    DWORD WnetCloseEnum( HANDLE hEnum );

    hEnum:由WnetOpenEnum函数的参数lphEnum传入。

    (4)gethostbyname函数

    gethostbyname函数能够通过计算机的名称返回其网络信息,这个信息中包括IP地址。

    语法:

    struct hostent FAR * gethostbyname ( const char FAR * name );

    name:包含计算机名称的字符串。

    下面以一个具体实例介绍如何获得网络计算的名称和IP。程序设计具体步骤如下。

    *  ch1803实例位置:mr/18/sl/03 

    (1)新建一个基于对话框的应用程序,设计对话框资源如图18.5所示。

    图18.5  主对话框资源设计窗口

    (2)在对话框的OnInitDialog方法中获取网络中的计算机和IP。

    //初始化网络库

    WSADATA wsd;

    WSAStartup(MAKEWORD(2,2),&wsd);

    //设置表格风格

    m_grid.SetExtendedStyle(LVS_EX_FLATSB

        |LVS_EX_FULLROWSELECT

        |LVS_EX_HEADERDRAGDROP

        |LVS_EX_ONECLICKACTIVATE

        |LVS_EX_GRIDLINES);

    //向表格中插入列

    m_grid.InsertColumn(0,"计算机名",LVCFMT_LEFT,200,0);

    m_grid.InsertColumn(1,"IP地址",LVCFMT_LEFT,200,0);

    DWORD Count=0xFFFFFFFF,Bufsize=4096,Res;

    NETRESOURCE* nRes;

    NETRESOURCE* nRes1;

    NETRESOURCE* nRes2;

    HANDLE lphEnum;

    LPVOID Buf = new char[4096];

    LPVOID Buf1 = new char[4096];

    LPVOID Buf2 = new char[4096];

    //打开列举的网络资源

    Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,

    RESOURCEUSAGE_CONTAINER,NULL,&lphEnum);

    //获取列举的网络资源信息

    Res=WNetEnumResource(lphEnum,&Count,Buf,&Bufsize);

    nRes=(NETRESOURCE*)Buf;

    for(DWORD n=0;n<Count;n++,nRes++)

    {

        DWORD Count1=0xFFFFFFFF;

        Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,

        RESOURCEUSAGE_CONTAINER,nRes,&lphEnum);

        Res=WNetEnumResource(lphEnum,&Count1,Buf1,&Bufsize);

        nRes1=(NETRESOURCE*)Buf1;

        for(DWORD i=0;i<Count1;i++,nRes1++)

        {

            DWORD Count2=0xFFFFFFFF;

            Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,

        RESOURCEUSAGE_CONTAINER,nRes1,&lphEnum);

            Res=WNetEnumResource(lphEnum,&Count2,Buf2,&Bufsize);

            nRes2=(NETRESOURCE*)Buf2;

            for(DWORD j=0;j<Count2;j++,nRes2++)

            {

                m_grid.InsertItem(j,0);

                CString sName=nRes2->lpRemoteName;

                sName=sName.Right(sName.GetLength()-2);

                m_grid.SetItemText(j,0,sName);

                CString str="";

                struct hostent * pHost;

                pHost = gethostbyname(sName);

                if(pHost==NULL)

                {

                    m_grid.SetItemText(j,1,"无法获得IP地址");

                }

                else

                {

                    for(int n=0;n<4;n++)

                    {

                        CString addr;

                        if(n > 0)

                        {

                            str += ".";

                        }

                        addr.Format("%u",(unsigned int)((unsigned char*)pHost->h_addr_list[0])[n]);

                        str += addr;

                    }

                    m_grid.SetItemText(j,1,str);

                }

            }

        }

    }

    delete Buf;

    delete Buf1;

    delete Buf2;

    WNetCloseEnum(lphEnum);

    (3)运行程序,效果如图18.6所示。

    图18.6  获取局域网计算机名称和IP

    18.2.4  获得网上共享资源

    在有局域网的单位中,如果能将一些资源共享,不但能提高资源的有效利用,还能提高工作效率,节省资源。但资源共享后,如果不进行有效的管理和利用,将不能高效、合理地使用网上资源。如果想获得网上共享资源可以根据Windows API函数库中的WnetOpenEnum、WnetEnumResource和WnetCloseEnum函数来实现。有关这些函数的介绍请参考18.2.3节获取局域网计算机名称和IP。

    下面根据一个例子来介绍如何获得网上共享资源,以方便查看局域网上的资源。具体操作步骤如下。

    *  ch1804实例位置:mr/18/sl/04

    (1)新建一个基于对话框的应用程序,设计对话框资源如图18.7所示。

    图18.7  网上共享资源设计窗口

    (2)在对话框的OnInitDialog方法中列举共享资源。

    //创建图像列表控件

    m_imagelist.Create(16,16,ILC_COLOR24|ILC_MASK,0,0);

    //向图像列表中添加图标

    m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON3));

    m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));

    m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2));

    m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON4));

    HICON hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

    m_Tree.SetImageList(&m_imagelist,LVSIL_NORMAL);

    m_Root=m_Tree.InsertItem("整个网络",0,0);

    m_Tree.Expand(m_Root,TVE_EXPAND);

    DWORD Count=0xFFFFFFFF,Bufsize=4096,Res;

    NETRESOURCE* nRes;

    NETRESOURCE* nRes1;

    NETRESOURCE* nRes2;

    NETRESOURCE* nRes3;

    HANDLE lphEnum;

    LPVOID Buf = new char[4096];

    LPVOID Buf1 = new char[4096];

    LPVOID Buf2 = new char[4096];

    LPVOID Buf3 = new char[4096];

    //打开网络资源列举

    Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,
         RESOURCEUSAGE_CONTAINER,NULL,&lphEnum);

    //列举网络资源

    Res=WNetEnumResource(lphEnum,&Count,Buf,&Bufsize);

    nRes=(NETRESOURCE*)Buf;

    for(DWORD n=0;n<Count;n++,nRes++)

    {

        DWORD Count1=0xFFFFFFFF;

        Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,

    RESOURCEUSAGE_CONTAINER,nRes,&lphEnum);

        Res=WNetEnumResource(lphEnum,&Count1,Buf1,&Bufsize);

        nRes1=(NETRESOURCE*)Buf1;

        for(DWORD i=0;i<Count1;i++,nRes1++)

        {

            m_Group = m_Tree.InsertItem(nRes1->lpRemoteName,1,1,m_Root);

            DWORD Count2=0xFFFFFFFF;

            Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,

            RESOURCEUSAGE_CONTAINER,nRes1,&lphEnum);

            Res=WNetEnumResource(lphEnum,&Count2,Buf2,&Bufsize);

            nRes2=(NETRESOURCE*)Buf2;

            for(DWORD j=0;j<Count2;j++,nRes2++)

            {

                CString sName = nRes2->lpRemoteName;

                sName = sName.Right(sName.GetLength()-2);

                m_Name = m_Tree.InsertItem(sName,2,2,m_Group);

                DWORD Count3=0xFFFFFFFF;

                Res = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY,

                RESOURCEUSAGE_CONNECTABLE,nRes2,&lphEnum);

                Res=WNetEnumResource(lphEnum,&Count3,Buf3,&Bufsize);

                nRes3=(NETRESOURCE*)Buf3;

                for(DWORD k=0;k<Count3;k++,nRes3++)

                {

                    CString sShare = nRes3->lpRemoteName;

                    sShare = sShare.Right(sShare.GetLength()-3-sName.GetLength());

                    m_Tree.InsertItem(sShare,3,3,m_Name);

                }

            }

        }

    }

    delete Buf;

    delete Buf1;

    delete Buf2;

    delete Buf3;

    WNetCloseEnum(lphEnum);

    (3)运行程序,效果如图18.8所示。

    图18.8  获得网上共享资源

    18.2.5  在局域网中发送短消息

    Windows系统提供有信使服务,用户可以通过该服务向局域网中的用户发送信息。为了使用Windows信使服务,需要使用netapi函数NetMessageBufferSend。为了使用该函数,需要从netapi32.dll动态库中导入该函数。

    下面根据一个例子来介绍如何在局域网中发送短消息。具体操作步骤如下。

    *  ch1805实例位置:mr/18/sl/05

    (1)新建一个基于对话框的应用程序,向对话框中添加按钮、编辑框、静态文本等控件,如图18.9所示。

    (2)处理“发送”按钮的单击事件,向指定计算机发送信息。

    typedef UINT ( __stdcall *funNetMessageBufferSend)

    (LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR,DWORD);

    void CSendMsgDlg::OnSend()

    {

        CString name;

        m_Merchine.GetWindowText(name);

       

        if (name.IsEmpty())

        {

            MessageBox("请输出对方名称");

            return;

        }

        //加载网络库

        HINSTANCE  hInstance = LoadLibrary("netapi32.dll");

        //获取函数入口地址

        funNetMessageBufferSend NetMessageBufferSend = (funNetMessageBufferSend)

        GetProcAddress(hInstance,"NetMessageBufferSend");

        if (NetMessageBufferSend)

        {

            CString content;

            m_Content.GetWindowText(content);

            CString localname;

            localname.GetBufferSetLength(MAX_PATH);

            gethostname(localname.GetBuffer(0), MAX_PATH);

            NetMessageBufferSend(NULL,name.AllocSysString(),NULL

            ,_T(content.AllocSysString()),content.GetLength()*2);

            content.ReleaseBuffer();

            localname.ReleaseBuffer();

        }

        FreeLibrary(hInstance);

    }

    (3)运行程序,效果如图18.10所示。

          

    图18.9  对话框设计窗口                     图18.10  在局域网中发送短消息

    展开全文
  • 随着电力电子技术迅速发展,高频开关电源已广泛应用于计算机、通信、工业加工和航空航天等领域。因此,从事开关电源学习和研究高校师牛及从事开关电源设计研发工程人员,都迫切需要理论性、实用性强学习...
  • 软件工程知识点

    2012-12-02 21:34:25
    计算机系统是一个非常复杂并具有智能特性开发系统,包括:硬件系统、软件系统、网络通信系统、人工操作系统等诸多子系统。 (2)系统分析 系统分析是对软件项目高层分析,需要获取是有关系统框架描述,并...
  • 书中描述了如何解决我们将面临众多架构设计挑战,包括如何管理分布式数据,还介绍了如何将单体应用程序重构为微服务架构,涵盖44个架构设计模式,系统解决服务拆分、事务管理、查询和跨服务通信等难题。...

    世界级架构师带你学微服务

    本书由世界十大软件架构师之一、微服务架构的先驱、Java开发者社区的意见领袖Chris Richardson亲笔撰写,旨在帮助架构师和程序员学会使用微服务架构成功开发应用程序。书中描述了如何解决我们将面临的众多架构设计挑战,包括如何管理分布式数据,还介绍了如何将单体应用程序重构为微服务架构,涵盖44个架构设计模式,系统解决服务拆分、事务管理、查询和跨服务通信等难题。本书并不是鼓吹微服务架构的宣言,作者既介绍了微服务的原理、原则,又详细讲解了实际落地中的架构设计模式,将使你理解微服务架构、它的好处和弊端,以及应该何时使用微服务架构。本书将帮助你建立微服务的全局视野,并学会在纷繁复杂的情况下做出正确的架构选择和取舍。

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    大牛力推

    适读人群 :本书的重点是架构和开发,适合负责开发和交付软件的任何人(例如开发人员、架构师、 CTO等)阅读。示例代码使用Java语言和Spring框架

    本书将教会你如何开发和部署生产级别的微服务架构应用。这套宝贵的架构设计模式建立在数十年的分布式系统经验之上,Chris还为开发服务添加了新的模式,并将它们组合成可在真实条件下可靠地扩展和执行的系统。本书不仅仅是一个模式目录,还提供了经验驱动的建议,以帮助你设计、实现、测试和部署基于微服务的应用程序。

    本书包含:

    ●如何(以及为什么)使用微服务架构

    ●服务拆分的策略

    ●事务管理和查询相关的模式

    ●高效的测试策略

    ●包括容器和Serverless在内的部署模式

    本书专为熟悉标准企业应用程序架构的开发人员编写,使用Java语言和Spring框架编写所有示例代码。

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

    由于篇幅限制,仅展示了部分目录,需要获取完整资料的小伙伴,一键三连后,添加小助理获取哦

     

     

     

    部分内容展示

    【本书内容安排】,本书由13章组成:

    第1章 逃离单体地狱

    本章导读

    • 单体地狱的特征,如何借助微服务架构逃离单体地狱
    • 微服务架构的基本特征,它的好处和弊端
    • 开发大型复杂应用时,如何借助微服务实现DevOps式开发风格
    • 微服务架构的模式语言及为什么使用它

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第2章 服务的拆分策略

    本章导读

    • 理解软件架构,以及它为什么如此重要
    • 使用拆分模式中的业务能力模式和子域模式进行单体应用到服务的拆分
    • 使用领域驱动设计中的限界上下文概念来分解数据,并让服务拆分变得更容易

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第3章 微服务架构中的进程间通信

    本章导读

    • 通信模式的具体应用:远程过程调用、断路器、客户端发现、自注册、服务端发现、第三方注册、异步消息、事务性发件箱、事务日志拖尾、轮询发布者
    • 进程间通信在微服务架构中的重要性
    • 定义和演化API
    • 如何在各种进程间通信技术之间进行权衡
    • 使用异步消息对服务的好处
    • 把消息作为数据库事务的一部分可靠发送

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第4章 使用Saga管理事务

    本章导读

    • 为什么分布式事务不适合现代应用程序
    • 使用Saga模式维护微服务架构的数据一 致性
    • 使用协同和编排这两种方式来协调Saga
    • 采用对策来解决缺乏隔离的问题

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第5章 微服务架构中的业务逻辑设计

    本章导读

    • 设计业务逻辑组织模式:事务脚本模式和领域建模模式
    • 使用领域驱动设计的聚合模式设计业务逻辑
    • 在微服务架构中应用领域事件模式

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第6章 使用事件溯源开 发业务逻辑

    本章导读

    • 使用事件溯源模式开发业务逻辑
    • 实现事件存储库
    • 整合Saga和基于事件溯源的业务逻辑
    • 使用事件溯源实现Saga编排器

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

    由于篇幅限制,仅展示了部分目录,需要获取完整资料的小伙伴,一键三连后,添加小助理获取哦

     

     

    第7章 在微服务架构中实现查询

    本章导读

    • 在微服务架构中查询数据的挑战
    • 何时以及如何使用API组合模式实现查询
    • 何时以及如何使用CQRS模式实现查询

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第8章 外部API模式

    本章导读

    • 设计能够支持多种客户端的API的挑战
    • 使用API Gateway模式和后端前置模式
    • 设计和实现API Gateway
    • 使用响应式编程来简化API组合
    • 使用GraphQL实现API Gateway

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第9章 微服务架构中的测试策略(上)

    本章导读

    • 微服务中有效的测试策略
    • 使用模拟(mock)和桩(stub)对软件中的元素执行隔离测试
    • 使用测试金字塔确定测试工作的重点
    • 对服务中的类执行单元测试

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第10章 微服务架构中的测试策略 (下)

    本章导读

    • 在隔离环境中测试服务的技术。
    • 使用消费者驱动的契约测试编写快速且可靠的测试,用来验证服务间的通信。
    • 何时以及如何进行应用程序的端到端测试。

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第11章 开发面向生产环境的微服务应用

    本章导读

    • 开发安全的服务
    • 如何使用外部化配置模式
    • 如何使用可观测性模式
    • 健康检查API
    • 日志聚合
    • 分布式跟踪
    • 异常跟踪
    • 应用程序指标
    • 审核日志记录
    • 通过使用微服务基底模式简化服务的开发

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第12章 部署微服务应用

    本章导读

    • 四个关键部署模式,它们如何工作,以及它们的好处和弊端:
    • 编程语言特定的发布包格式
    • 将服务部署为虚拟机
    • 将服务部署为容器
    • Serverless 部署
    • 使用Kubernetes部署服务
    • 使用服务网格把服务发布环节与服务部署环节分开
    • 使用AWS L ambda部署服务
    • 选择部署模式

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    第13章 微服务架构的重构策略

    本章导读

    • 何时将单体应用迁移到微服务架构
    • 在将单体应用重构为微服务架构应用时,为什么使用增量方法至关重要
    • 将新功能实现为服务
    • 从单体中提取服务
    • 集成服务和单体

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

     

    专家力推与读者收获

    需要这份【微服务架构设计模式】484页技术文档的小伙伴,可以一键三连后,添加小助理获取哦

     

     

    世界排名前十架构师,总结这份484页微服务架构笔记,你不学?

    展开全文
  • 1,父进程listen,创建pipe(下面所有父子进程之间的通信都用该pipe) 2,父进程预fork n个子进程 3,各个子进程accept(listenfd),即所有子进程竞争accept请求。由于listenfd是在fork之前就有,所以所有子进程都...
  • 综合布线系统就是用数据和通信电缆、光缆、各种软电缆及有关连接硬件构成通用布线系统,是能支持语音、数据、影像和其他控制信息技术标准应用系统。 3.综合布线系统是智能建筑基础 综合布线系统是智能建筑...
  • 深入理解Android:卷I--详细书签版

    热门讨论 2012-12-12 15:51:21
     结合实际应用开发需求,以情景分析方式有针对性地对Android源代码进行了十分详尽剖析,深刻揭示Android系统的工作原理  机锋网、51CTO、开源中国社区等专业技术网站一致鼎力推荐 内容简介  《深入理解...
  • 共识算法,就是解决对某一提案(目标,投票等各种协作工作),大家达成一致意见的过程 比如上述买票问题,就可以有如下的设计: 1.每次卖票打电话给其他电影院,确认当前票数 2.协商售卖时间,比如一三五A卖,二...
  • 共识算法,就是解决对某一提案(目标,投票等各种协作工作),大家达成一致意见的过程 比如上述买票问题,就可以有如下的设计: 1.每次卖票打电话给其他电影院,确认当前票数 2.协商售卖时间,比如一三五A卖,二...
  •  本书全面深入地介绍了mysql的功能,主要内容包括mysql、php、apache、perl等组件的安装与功能简介,mysql等一些重要系统管理工具和用户操作界面的使用,mysql数据库系统设计的基础知识与用不同语言设计mysql数据库...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

通信系统应用设计的意见