Javascript Node.js中的同步TCP读取
有没有办法同步读取node.js中的TCP套接字 我很清楚如何通过向套接字的“数据”事件添加回调来异步执行此操作:Javascript Node.js中的同步TCP读取,javascript,node.js,tcp,boost-asio,Javascript,Node.js,Tcp,Boost Asio,有没有办法同步读取node.js中的TCP套接字 我很清楚如何通过向套接字的“数据”事件添加回调来异步执行此操作: socket.on('data', function(data) { // now we have the string data to do whatever with }); 我还意识到,尝试用函数调用来阻止而不是注册回调不符合节点的设计,但我们正在尝试更新一个旧的节点模块,该模块充当我所在大学的客户端,同时保持向后兼容性。因此,我们目前有: var someData
socket.on('data', function(data) {
// now we have the string data to do whatever with
});
我还意识到,尝试用函数调用来阻止而不是注册回调不符合节点的设计,但我们正在尝试更新一个旧的节点模块,该模块充当我所在大学的客户端,同时保持向后兼容性。因此,我们目前有:
var someData = ourModule.getData();
其中getData()
之前有一系列逻辑,但现在我们只想发送到服务器“rungetdata()”并等待结果。这样,所有的逻辑都是服务器端的,而不是重复的客户端和服务器端。这个模块已经维护了到服务器的TCP连接,所以我们只是在这个基础上进行
以下是我尝试过的解决方案:
string_from_tcp = socket.recv(1024)
这里的问题是它似乎不存在(毫不奇怪,因为它违背了node的意识形态)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!
这里明显的问题是,我认为这样的事情不存在var stringFromTcp = yield socketRead(1024);
这里的问题是,我们会强迫学生将他们的JavaScript客户端更新为这种新语法,并且理解ES6超出了使用这种语法的课程的范围还有其他想法吗?如果这在一个节点项目的上下文中看起来是亵渎神明的话,请提前表示歉意,并感谢您的任何输入。我最后选择了选项5。我在C++()中找到了一个小的、快速的、易于构建的TCP库,并为它编写了一个节点模块包装器。 模块是在Windows和Linux上构建的,但由于它是C++插件,所以需要配置节点GYP来构建它。
我希望其他人不必像我使用此模块那样使用Node.js,但如果您必须使用TCP调用阻止事件循环,这可能是您唯一的赌注。谢谢,但我认为socket.io无法解决我的问题。当我试图用代码从服务器同步获取数据时,它只会触发异步事件。。。我只是做了一些网络搜索。有一个
sync:true
选项。这可能会有帮助。我没有完全阅读它。祝你好运。那么你有一个函数getData()
,它与服务器建立连接,获取一些数据,然后返回它?这一切都是同步实现的?您以前在哪个平台执行此代码?感谢ODelibalta对该标志的提醒。它似乎没有改变任何东西,但我将深入研究net模块的源代码,试图找出用于提示的标志。TCP连接已经建立。所有这些都是通过TCP发送一些数据,并期望服务器通过打开的TCP套接字发送的下一个数据是响应。目前,客户机有一份服务器逻辑副本,以了解从getData()
中可以得到什么,但是在客户机和服务器上实现该逻辑每学期都很乏味,因此我们现在尝试要求服务器运行该逻辑并给出结果。