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

尝试在同一节点进程中使用客户端和服务器创build回显服务器testing。 如果将代码拆分为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"); } 

这是你的问题。 你无限期地写信给这个stream。 如果它永远不会结束,它不会触发你的“数据”事件。 为了更清楚地说明,试试这个(代替上面的代码):

 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);