【问题标题】:node.js REPL over socket hangs up when CTRL + C or CTRL + D is pressed按下 CTRL + C 或 CTRL + D 时,node.js REPL over socket 挂起
【发布时间】:2013-01-20 17:56:02
【问题描述】:

我正在尝试像 telnet 连接一样在套接字上使用 REPL,但是当我按 CTRL + C 或 CTRL + D 时,或者产生错误时,套接字连接挂起并且不响应任何内容。

node.js 代码为:

var net = require("net");
var connections = 0;

// Socket port 5001
net.createServer(function (socket) {
  connections += 1;
  var server = require("repl").start(
      'session:' + connections + ' > ', 
      socket
  );
  server.rli.on('exit', function() {
    socket.end();
  });
}).listen(5001);

// Console
var server = require("repl").start('session:' + (++connections) + ' > ', null);

我从其他终端运行:

telnet localhost 5001

有什么问题?

【问题讨论】:

    标签: node.js sockets read-eval-print-loop


    【解决方案1】:

    可能是linux的问题。

    我试过Telnet server example with node。 当我在窗口上运行时,我按下的每个键都由receiveData 函数处理,但在 linux 中没有。 在 linux 中,每行处理一行,而不是每个字符一个字符。

    这是我研究过的代码:

    var net = require('net');
    var sockets = [];
    
    /*
     * Cleans the input of carriage return, newline
     */
    function cleanInput(data) {
        return data.toString().replace(/(\r\n|\n|\r)/gm,"");
    }
    
    /*
     * Method executed when data is received from a socket
     */
    function receiveData(socket, data) {
        var cleanData = cleanInput(data);
        if(cleanData === "@quit") {
            socket.end('Goodbye!\n');
        }
        else {
            for(var i = 0; i<sockets.length; i++) {
                if (sockets[i] !== socket) {
                    sockets[i].write(data);
                }
            }
        }
        socket.write('Data: ' + data);
    }
    
    /*
     * Method executed when a socket ends
     */
    function closeSocket(socket) {
        var i = sockets.indexOf(socket);
        if (i != -1) {
            sockets.splice(i, 1);
        }
    }
    
    /*
     * Callback method executed when a new TCP socket is opened.
     */
    function newSocket(socket) {
        sockets.push(socket);
        socket.write('Welcome to the Telnet server!\n');
        socket.on('data', function(data) {
            receiveData(socket, data);
        })
        socket.on('end', function() {
            closeSocket(socket);
        })
    }
    
    // Create a new server and provide a callback for when a connection occurs
    var server = net.createServer(newSocket);
    
    // Listen on port 8888
    server.listen(8888);
    

    【讨论】:

      猜你喜欢
      • 2011-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多