javascript – Node.js中的同步TCP读取
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – Node.js中的同步TCP读取,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2145字,纯文字阅读大概需要4分钟。
内容图文
有没有办法在node.js中同步读取TCP套接字?
我很清楚如何通过向套接字的’data’事件添加回调来异步执行它:
socket.on('data', function(data) {
// now we have the string data to do whatever with
});
我也知道尝试使用函数调用而不是注册回调来阻止节点的设计,但我们正在尝试更新一个旧节点模块,它充当我的大学的客户端,同时保持向后兼容性.所以我们目前有:
var someData = ourModule.getData();
其中getData()之前有一堆逻辑,但现在我们只想发送到服务器“run getData()”并等待结果.这样所有逻辑都是服务器端,而不是重复的客户端和服务器端.该模块已经维护了与服务器的TCP连接,因此我们只是捎带它.
以下是我尝试过的解决方案:
>找到一个隐藏的读取函数,该函数隐藏在类似于节点网络模块中python的套接字库的地方.
string_from_tcp = socket.recv(1024)
这里的问题是它似乎不存在(不出所料,因为它违背了节点的意识形态).
>这syncnet module增加了我的需求,但没有Windows支持;所以我必须补充一点.
>找到一个允许节点解除阻塞事件循环的函数,然后返回,这样就可以了:
var theData = null;
clientSocket.on('data', function(data) {
theData = data;
});
clientSocket.write("we want some data");
while(theData === null) {
someNodeFunctionThatUnblocksEventLoopThenReturnsHere(); // in this function node can check the tcp socket and call the above 'data' callback, thus changing the value of theData
}
// now theData should be something!
这里显而易见的问题是我不认为存在这样的事情.
>使用ECMAScript 6生成器功能:
var stringFromTcp = yield socketRead(1024);
这里的问题是我们强迫学生将他们的JavaScript客户端更新为这种新语法,并且理解ES6不在使用它的课程范围内.
>使用node-gyp并向我们的节点模块添加一个接口,该接口指向支持同步读取的C TCP库,例如boost的asio.这可能会有效但是使用boost cross平台编译节点模块一直是一个巨大的痛苦.所以我来Stack Overflow确保我不会过度复杂化这个问题.
用最简单的术语我只是想创建一个支持同步tcp读取的命令行JavaScript程序.
还有其他想法吗?如果在节点项目的上下文中这似乎是亵渎神明的话,请提前抱歉,并感谢任何输入.
解决方法:
我最终选择了5.我在C(netLink)中找到了一个小型,快速且易于构建的TCP库,并为其编写了一个节点模块包装器,名称为netlinkwrapper.
该模块基于Windows和Linux构建,但由于它是C插件,因此您需要配置node-gyp来构建它.
我希望没有其他人像我使用这个模块那样使用Node.js,但如果你必须用TCP调用来阻止事件循环,这可能是你唯一的选择.
内容总结
以上是互联网集市为您收集整理的javascript – Node.js中的同步TCP读取全部内容,希望文章能够帮你解决javascript – Node.js中的同步TCP读取所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。