2015-01-23 2 views
1

동일한 노드 프로세스에서 클라이언트와 서버 모두를 사용하여 에코 서버 테스트를 작성하려고합니다. 이 코드는 두 파일 (서버 및 클라이언트)로 분할하면 작동하지만 한 파일에 결합하면 작동하지 않습니다. 1 파일 내에서 어떻게 작동합니까? 커피 스크립트에서 동일한 nodejs 프로세스의 클라이언트와 서버

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 

답변

1
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); 
+0

감사합니다. bardzusny! 나는 "0"의 지연으로 SetInterval을 사용했고 데이터는 이제 펌핑되고있다! – joe

관련 문제