繁体   English   中英

客户端和服务器在同一nodejs进程中

[英]client and server in same nodejs process

尝试在同一节点进程中同时使用客户端和服务器创建回显服务器测试。 如果将其拆分为2个文件(服务器和客户端),则此代码有效,但如果合并为1个文件,则此代码不起作用。 如何在1个文件中使用它?

var HOST, createServer, g, net;

net = require("net");

HOST = "127.0.0.1";

createServer = function(port) {
  net.createServer(function(sock) {
    sock.write("welcome!  on port " + port + "\r\n");
    console.log("CONNECTED: " + sock.remoteAddress + ":" + sock.remotePort);
    while (true) {
      sock.write("hello\r\n");
    }
  }).listen(port, HOST);
  console.log("server listening on " + port);
};

createServer(7001);

g = net.createConnection(7001, HOST);

g.on("data", function(data) {
  console.log("got " + data);
});

和在咖啡脚本中一样:

net = require "net"
HOST = "127.0.0.1"

createServer = (port) ->
  net.createServer((sock) ->
    sock.write("welcome!  on port #{port}\r\n")
    console.log("CONNECTED: #{sock.remoteAddress}:#{sock.remotePort}")
    while true # this is the work queue, what ports to send to...                
      sock.write "hello\r\n"
    return
  ).listen port, HOST
  console.log "server listening on #{port}"
  return

createServer(7001)

# XXX why does g.on "data" never fire?                                           
# this works fine if I move it into                                              
# it's own file, how to co-exist                                                 
# this client with server above                                                  
# in same file?                                                                  
g = net.createConnection(7001, HOST)
g.on "data", (data) ->
  console.log "got #{data}"
  return
while (true) {
  sock.write("hello\r\n");
}

这是你的问题。 您正在无限期地写入流; 如果它永无止境,它将不会触发您的“数据”事件。 为了更清楚地说明,请尝试以下操作(代替上面的代码):

while (true) {
  console.log("hello!");
  sock.write("hello\r\n");
}

要么:

var i = 0;
while (i < 5) {
  i++;
  sock.write("hello\r\n");
}

编辑:要无限期地回显,也许尝试这样的事情:

net.createServer(function(sock) { 
  sock.write("welcome!  on port " + port + "\r\n");
  console.log("CONNECTED: " + sock.remoteAddress + ":" + sock.remotePort);
  setInterval(function() {
    sock.write("hello\r\n");
  }, 2000);
}).listen(port, HOST);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM