从API开始理解QNX -- 消息传递    http://www.openqnx.com/chinese/viewtopic.php?f=5&t=2161

1. 频道与连接
    Channel, Connect
    
    server:
        ChannelId = ChannelCreate(Flags);
    client:
        ConnectionId = ConnectAttach(Node, Pid, Chid, Index, Flag);
        Node: 机器号; Pid是服务进程号; Chid就是ChannelCreate后得到的频道号.
    连接的终止是ConnectDetach(),而频道的结束则是ChannelDestroy()了。不过,一般服务器都是长久存在的,不大有需要ChannelDestroy()的时候。
2.     发送,接收与应答
    Send, Receive, Reply

server:
        RecieveId = MsgReceive(ChannelId, ReceiveBuffer, ReceiveBufLength,&MsgInfo);
        ...Deal Recvd Msg....
        MsgReply(ReceiveId, ReplyBuf, ReplyLen);    
        
    client:
        MsgSend(ConnectionId, SendBuf, SendLen, ReplyBuf, ReplyLen);
        ....然后由OS将这个线程挂起...
        ....当服务器MsgReply()后,OS解除线程阻塞状态,客户端可以检查自己的ReceiveBuf看看应答效果...
        
3. 数据区与iov
虽然在客户端Header同databuf是两块不相邻的内存,但传递到服务器端的ReceiveBuffer里,就是连续的了。

客户端: "header" 与 "databuf" 是不连续的两块数据。
    SETIOV(&iov[0], &header, sizeof(header));
    SETIOV(&iov[1], databuf, datalen);
    MsgSendvs(ConnectionId, iov, 2, Replybf, ReplyLen);

服务器: 接收后,"header"与"databuf"被连续地存在ReceiveBuffer里。
    ReceiveId = MsgReceive(ChannelId, ReceiveBuffer, ReceiveBufLength, &MsgInfo);
    header = (struct header *)ReceiveBuffer;
    databuf = (char *)((char *)header + sizeof(*header));
    当指定的ReceiveBufLength小于实际收到的字节数,即MsgReceive不一定读完了所有来自client的数据,因此还需要查看MsgInfo,并使用MsgRead(ReceiveId,
                                ReceiveBuffer+ReceiveBufLength, // 指定存数据buffer起始地址
                                ReceiveBufLength, // 去缓冲区读数据时候的偏移量
                                MsgInfo->srcmsglen - MsgInfo->msglen    // 未读取完的数据长度    
                            ));

qnx:从API开始理解QNX -- 消息传递的更多相关文章

  1. 2.API的理解和使用

    标题 : 2.API的理解和使用 目录 : Redis 序号 : 2 ​ zset的成员是唯一的,但分数(score)却可以重复. ​ 有序集合的内部编码 1.ziplist(压缩列表):当有序集合的 ...

  2. Spark笔记:复杂RDD的API的理解(下)

    本篇接着谈谈那些稍微复杂的API. 1)   flatMapValues:针对Pair RDD中的每个值应用一个返回迭代器的函数,然后对返回的每个元素都生成一个对应原键的键值对记录 这个方法我最开始接 ...

  3. Spark笔记:复杂RDD的API的理解(上)

    本篇接着讲解RDD的API,讲解那些不是很容易理解的API,同时本篇文章还将展示如何将外部的函数引入到RDD的API里使用,最后通过对RDD的API深入学习,我们还讲讲一些和RDD开发相关的scala ...

  4. 对RESTful Web API的理解与设计思路

    距离上一篇关于Web API的文章(如何实现RESTful Web API的身份验证)有好些时间了,在那篇文章中提到的方法是非常简单而有效的,我在实际的项目中就这么用了,代码经过一段时间的磨合,已经很 ...

  5. 关于Android API的理解

    举个例子: 比如程序中用到了android.content.ClipboardManager这个类, 而该类是在API 11才添加到 “库”. (原谅我,不理解Google API 文档里的 adde ...

  6. 说说自己对RESTful API的理解s

    REST不是英文上的rest单词,其英文缩写为presentational State Transfer ,直译为表现状态转移,咋看起来很学术,不懂,其实不用去死抠这个词的意思.REST是一种约束和架 ...

  7. 网上整理的对于Rest和Restful api的理解

    一.什么是Rest? REST不是"rest"这个单词,而是几个单词缩写 -- REpresentational State Transfer 直接翻译:表现层状态转移,但这个翻译 ...

  8. 安卓开发_深入理解Handler消息传递机制

    一.概述 因为子线程的run()方法无法修改UI线程(主线程)的UI界面,所以Android引入了Handler消息传递机制,实现在新创建的线程中操作UI界面 二.消息类(Message) 消息类是存 ...

  9. 说说自己对RESTful API的理解

    REST不是英文上的rest单词,其英文缩写为presentational State Transfer ,直译为表现状态转移,咋看起来很学术,不懂,其实不用去死抠这个词的意思.REST是一种约束和架 ...

随机推荐

  1. 一道Python练习题

    有关字符串与编码的,转自廖雪峰Python教程. 小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,并用字符串格式化显示出'xx.x%',只保留小数点后1位: # -*- co ...

  2. C#对象赋值出现的诡异问题,或许你也遇到过,有待你的解决

    前言:今天在代码中,又出现了这个问题,就是对象赋值给一个新的对象时,然后更改新对象中的属性,就会把老对象的值也更改,以前也遇到这个问题,只是没有深究,今天刚好又遇到了此问题,我决定写下来,和大家一起分 ...

  3. Git安装及基本使用

    准备: Git软件,github账号. Git安装: 直接百度搜git下载,windows和mac不同平台的.官网上的下载地址很慢或者根本下不了. 默认配置安装. github: 网址:https:/ ...

  4. Intro to Computer Science Class Online (CS101) - Udacity

    Intro to Computer Science Class Online (CS101) - Udacity Building a Search Engine

  5. XML 文档解析操作

    sing System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security; ...

  6. ExtJs005继承

    Ext.onReady(function () { //extend 继承 Ext.define('Person', { config: { name: 'aaa' }, //给当前定义的类加一个构造 ...

  7. window.parent与window.opener的区别与使用

    window.parent 是iframe页面调用父页面对象 举例: a.html 如果我们需要在b.html中要对a.html中的username文本框赋值(就如很多上传功能,上传功能页在ifrma ...

  8. JS笔记 入门第一

    WHY? 一.你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部分网页都使用JavaScript. 3. 它可以让网页呈现 ...

  9. Bootstrap dropdown 使用

    同样是2种方式 参考http://www.bootcss.com/javascript.html#dropdowns JS方式调用 http://www.w3resource.com/twitter- ...

  10. 帝国cms7.0 内容页控制简介字数!

    帝国cms7.0 内容页有简介部分,使用以下代码可以有效控制字数限制! 下载类简介:<?=esub($navinfor[softsay],160)?> 文章类简介:<?=esub($ ...