Nodejs中关于http中connection事件

Nodejs中关于http中connection事件

看文档里有这么一句描述: Event: ‘connection’ 事件:'connection’ function (stream) { }

When a new TCP stream is established. stream is an object of type net.Stream. Usually users will not want to access this event. The stream can also be accessed at request.connection.

当一个新的TCP流建立后触发此事件。stream是一个net.Stream类型的对象,通常用户不会使用这个事件。参数stream也可以在request.connection中获得。

看文字的意思就是说有一个连接就会进入connection事件,可是在代码里应该如何写呢,不是很明白。哪个高人能给贴个列子


3 回复

当然可以!connection 事件在 Node.js 的 http 模块中并不是直接可用的,它主要与 net 模块中的 TCP 流相关。但是,你可以在 http.Server 中监听底层的 connection 事件来处理这些 TCP 连接。

下面是一个简单的示例代码,展示了如何在 http.Server 中监听 connection 事件:

const http = require('http');

const server = http.createServer((req, res) => {
    // 处理 HTTP 请求的代码
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
});

// 监听 connection 事件
server.on('connection', (socket) => {
    console.log('New TCP stream established:', socket.remoteAddress, socket.remotePort);
    
    // 你可以在这里添加对连接的处理逻辑
    socket.on('end', () => {
        console.log('Connection closed by client');
    });
});

server.listen(3000, () => {
    console.log('Server listening on port 3000');
});

解释

  1. 创建 HTTP 服务器

    const server = http.createServer((req, res) => {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello World\n');
    });
    

    这部分代码创建了一个简单的 HTTP 服务器,当接收到请求时会返回 “Hello World”。

  2. 监听 connection 事件

    server.on('connection', (socket) => {
        console.log('New TCP stream established:', socket.remoteAddress, socket.remotePort);
        
        socket.on('end', () => {
            console.log('Connection closed by client');
        });
    });
    

    这部分代码监听 connection 事件。每当一个新的 TCP 连接被建立时,connection 事件会被触发,并传递一个 socket 对象。socket 是一个 net.Socket 类型的对象,代表客户端的 TCP 连接。

  3. 监听 end 事件

    socket.on('end', () => {
        console.log('Connection closed by client');
    });
    

    在这个示例中,我们还监听了 socketend 事件,以便知道连接何时被客户端关闭。

通过这种方式,你可以在 Node.js 中利用 http.Server 监听并处理底层的 TCP 连接事件。


var net = require('net');

var server = net.createServer(function(c) {
    c.setEncoding('utf8');
    c.on('data', function(d) {
        c.write('{' + d.trim() + '}\n');
    });
});

server.listen(9871);

来源:http://stackoverflow.com/questions/12607502/how-to-process-a-net-stream-using-node-js

在Node.js中,http模块的服务器实例会触发'connection'事件,当一个新的TCP连接被建立时。该事件通常不直接被用户使用,因为你可以通过request.connection访问到相同的TCP流对象。

以下是一个简单的示例代码,展示了如何监听'connection'事件,并打印出相关信息:

const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
});

server.on('connection', (stream) => {
  console.log('New connection established:', stream.remoteAddress, stream.remotePort);
});

server.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

解释

  1. 创建HTTP服务器:我们使用http.createServer()创建一个HTTP服务器,并提供了一个请求处理函数。

  2. 监听'connection'事件:通过调用server.on('connection', callback)来监听'connection'事件。每当有一个新的TCP连接被建立时,该回调函数会被执行,其中stream参数代表了新建立的TCP流。

  3. 打印信息:在回调函数中,我们打印出新连接的远程IP地址(remoteAddress)和端口号(remotePort)。这有助于理解哪些客户端正在与服务器通信。

  4. 启动服务器:最后,我们调用server.listen()方法让服务器开始监听指定端口(这里是3000)上的连接。

这段代码可以帮助你了解如何在Node.js中使用'connection'事件。请注意,通常情况下,大多数应用逻辑可以直接在请求处理函数中完成,因此'connection'事件不是必需的。但在某些特定场景下(例如监控、日志记录等),它可以提供有用的信息。

回到顶部