ToB企服应用市场:ToB评测及商务社交产业平台

标题: Node.js新草案:通过共享库利用Node.js [打印本页]

作者: 麻花痒    时间: 2025-1-17 17:24
标题: Node.js新草案:通过共享库利用Node.js
对于大部门开发者而言,很难把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:


运行时API:


消息循环相关的API


与Node.js互操作API


看上去非常诱人,有了这一套东西,我们就可以不用修改Node.js的源码,直接在应用程序中利用Node.js了,而且始终与Node.js保持兼容。
从草案的提交纪录看,很多Node.js团队的成员都到场了讨论,但开发工作主要是一个人在做,希望这个草案能早日实现。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4