【发布时间】:2011-04-27 06:37:55
【问题描述】:
我今天刚开始玩 Node.js,我想我会从我认为的简单脚本开始:通过套接字连接到服务器,发送一些数据,然后接收回来.我正在创建一个命令行实用程序。浏览器中没有任何内容。
服务器的一个例子是 memcached、beantalkd 等。看起来 net 模块是适合这项工作的工具,但我对 Node.js 的处理方式仍然有点模糊。一些帮助将不胜感激。
更新 #1
让我看看是否可以将其分解为几个较小的问题。我什至讨厌问这样的问题,但是 Node.js 文档非常稀少,而且 6 个月前编写的大多数文档已经过时了。
1) 所以我可以使用 net.stream.write() 将数据发送到远程服务器,但我不知道如何得到响应。我什至不确定如何测试 write() 何时完成,因为它不需要回调。
2) 关于整个 event.emit 的工作原理的一些线索会很棒。我认为这确实是我在整件事中缺少的关键。
更新 #2
这就是我在实现客户端程序时仍然感到困惑的地方。让我绘制一个典型的发送请求 => 获取响应系统:
1) 我将回调绑定到 net 模块以获取响应和其他事件,包括从服务器获取响应所需的绑定。
2) 我使用 stream.write() 向服务器发送请求。
3) 然后我什么也不做,因为我绑定的“数据”事件会得到服务器的响应。
这就是事情变得棘手的地方。假设我在调用绑定的“数据”事件之前调用了 stream.write() 两次。现在我有一个问题。当“数据”事件确实发生时,我如何知道它响应了 2 个请求中的哪一个?我是否保证响应将按照与请求相同的顺序进行?如果响应以不同的顺序返回怎么办?
【问题讨论】:
-
没有太多时间提款机,但网。 nodejs.org/api.html 时钟在边栏中的
net.Server上。你有它。一切都是基于事件的,你必须监听流的data事件。该示例实际上更像是一个基本的回显服务器。如果你愿意,我可以稍后再为你做一些例子。 -
如果您需要知道客户端响应的是哪个
write很重要,您可能应该在您发送/接收的数据中添加一个id 或类似的东西。但这是网络的普遍问题,与基于事件的方法无关。
标签: javascript sockets node.js