zoukankan      html  css  js  c++  java
  • 多语言协作与二进制交互【转】

    最近刚刚完成了服务器端rpc协议的python封装,理论上说,后续的开发可以以python继续进行了。只是代码热更新还没好,项目进度又吃紧,暂时先放下了。利用rpc协议连接不同进程,各个进程就可以自由选择语言去开发,不局限于C、LPC了。让项目能够充分利用各个语言的优势,在不同的场景下选择特长语言进行开发,这图景不错。

    而客户端所用的Lua脚本,则是以另一种方式实现了多语言协作开发。通过精巧的Lua API,C层可以将一些灵活多变的逻辑操作转交给上层的Lua逻辑去完成,而Lua里的计算密集型的东西也可以放到C层去完成。

    我一直很好奇的是,C到底要怎么告诉Lua,我调用的是XXX,我给你传递一下参数A,类型是YYY,值是ZZZ。这跟我刚实现的RPC协议是十分类似的,但是Lua面向的是嵌入式设备,计算能力受限,估计不会采用socket进行中转。尤其是,当需要传递的不单是基础类型如int、string,还有映射表,列表等较为复杂的数据对象时,怎么实现这种转换呢?

    Lua采取的是利用栈进行交互,利用各种Lua_pushXXX将不同的值压入栈中,然后调用Lua脚本时自然会退栈取出参数运行,对于Lua的虚拟机来说,就像是发生了一次正常的函数调用。(这里采用的栈是Lua栈,因为若是C栈的话调用Lua的C API就会出错了。)需要注意的是,Lua栈状态需要自己进行维护,若发生多线程同时对Lua栈操作,没有加锁保护的话会导致栈状态混乱然后出很诡异的bug。

    关于Lua调用C的函数,还没做完实验,稍后再补充。

    来源:http://www.cnblogs.com/Lifehacker/archive/2013/03/26/Lua_C_interact.html

  • 相关阅读:
    我的死党前同事 料
    相信缘份吗?我所见所闻的测试工程师
    多线程基础【面试题形式】
    kafka学习(五)Spring Boot 整合 Kafka
    kafka学习(四)kafka安装与命令行调用
    J2EE的13个规范总结
    Spring Boot学习(四)常用注解
    kafka学习(三)kafka生产者,消费者详解
    dubbo学习(十一)dubbo知识点总结
    MyBatis学习(三)日志输出环境配置
  • 原文地址:https://www.cnblogs.com/tibetanmastiff/p/4590807.html
Copyright © 2011-2022 走看看