论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
物联网
›
物联网
›
Node.js新草案:通过共享库利用Node.js
Node.js新草案:通过共享库利用Node.js
麻花痒
论坛元老
|
2025-1-17 17:24:39
|
显示全部楼层
|
阅读模式
楼主
主题
1046
|
帖子
1046
|
积分
3138
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
对于大部门开发者而言,很难把Node.js看成一个类库(dll/so),嵌入到一个应用程序中。
这个工作之所以难,主要是由于Node.js(内置的libuv)有本身的消息循环,要想把这个消息循环和应用程序的消息循环归并到一起并不容易。
我们知道,应用程序的主线程只能有一个消息循环,要想归并前面提到的两个循环,一个常见的办法是把通过一个非常小的时间隔断,把一个消息循环的消息,泵入另一个消息循环,但如许做会导致导致GUI界面响应迟钝或占用大量CPU资源。
Electron的做法是如许的:创建了一个单独的线程并利用利用体系调用来轮询libuv的fd,以得到libuv的消息,得到libuv的消息后,再把消息交给GUI主线程,由主线程的消息循环处置处罚libuv的消息。
这里说的fd是一个文件描述符(句柄),libuv通过轮询这个fd得到本身的消息。详情请参阅Electron的文档:https://www.electronjs.org/blog/electron-internals-node-integration。如果你要看代码,我发起你直接看这个项目标代码:https://github.com/yue/yode,这个项目就是Electron的作者做的。发起你不要直接利用yode,由于它有BUG,详见:https://github.com/yue/yue/issues/180
除了Electron做这个工作外,NodeGui(https://docs.nodegui.org/)也做了这个工作,不外他的做法和Electron的做法是相同的。
不外,这种做法显然是要修改Node.js的源码的(修改的不算多)。也就是说,你得确保你修改的代码始终与Node.js更新的代码保持兼容,不然你就用不了新版的Node.js。
最近关注到Node.js为了方便开发者在应用程序内利用Node.js提了一个新草案:node-api: use c-based api for libnode embedding(https://github.com/nodejs/node/pull/54660)
这个草案的目标就是为嵌入式场景启用Node-API,允许开发者在应用程序内部以共享库的方式利用Node.js。
来看看草案中预计公开的这些API:
全局API:
node_embedding_set_api_version
node_embedding_run_main
node_embedding_create_platform
node_embedding_delete_platform
node_embedding_platform_set_flags
node_embedding_platform_get_parsed_args
运行时API:
node_embedding_run_runtime
node_embedding_create_runtime
node_embedding_delete_runtime
node_embedding_runtime_set_flags
node_embedding_runtime_set_args
node_embedding_runtime_on_preload
node_embedding_runtime_on_start_execution
node_embedding_runtime_add_module
消息循环相关的API
node_embedding_runtime_set_task_runner
node_embedding_run_event_loop
node_embedding_complete_event_loop
node_embedding_terminate_event_loop
与Node.js互操作API
node_embedding_run_node_api
node_embedding_open_node_api_scope
node_embedding_close_node_api_scope
看上去非常诱人,有了这一套东西,我们就可以不用修改Node.js的源码,直接在应用程序中利用Node.js了,而且始终与Node.js保持兼容。
从草案的提交纪录看,很多Node.js团队的成员都到场了讨论,但开发工作主要是一个人在做,希望这个草案能早日实现。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
麻花痒
论坛元老
这个人很懒什么都没写!
楼主热帖
【SQL server速成之路】——身份验证及 ...
2022年安装Kali Linux最详细过程,以及 ...
ping命令 网络抓包 分析
容器开发运维人员的 Linux 操作机配置 ...
窄带传输与LoRa扩频传输技术应用方案对 ...
我今年12岁了,我喜欢打游戏,怎么能成 ...
密码学奇妙之旅、02 混合加密系统、AES ...
程序员坐牢了,会被安排去写代码吗? ...
猜
kubectl使用技巧:如何更方便地操作多 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
Mysql
IOS
DevOps与敏捷开发
移动端开发
网络安全
前端开发
程序人生
云原生
虚拟化与私有云
MES
快速回复
返回顶部
返回列表