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事件,可是在代码里应该如何写呢,不是很明白。哪个高人能给贴个列子
当然可以!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');
});
解释
-
创建 HTTP 服务器:
const server = http.createServer((req, res) => { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); });
这部分代码创建了一个简单的 HTTP 服务器,当接收到请求时会返回 “Hello World”。
-
监听
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 连接。 -
监听
end
事件:socket.on('end', () => { console.log('Connection closed by client'); });
在这个示例中,我们还监听了
socket
的end
事件,以便知道连接何时被客户端关闭。
通过这种方式,你可以在 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');
});
解释
-
创建HTTP服务器:我们使用
http.createServer()
创建一个HTTP服务器,并提供了一个请求处理函数。 -
监听
'connection'
事件:通过调用server.on('connection', callback)
来监听'connection'
事件。每当有一个新的TCP连接被建立时,该回调函数会被执行,其中stream
参数代表了新建立的TCP流。 -
打印信息:在回调函数中,我们打印出新连接的远程IP地址(
remoteAddress
)和端口号(remotePort
)。这有助于理解哪些客户端正在与服务器通信。 -
启动服务器:最后,我们调用
server.listen()
方法让服务器开始监听指定端口(这里是3000)上的连接。
这段代码可以帮助你了解如何在Node.js中使用'connection'
事件。请注意,通常情况下,大多数应用逻辑可以直接在请求处理函数中完成,因此'connection'
事件不是必需的。但在某些特定场景下(例如监控、日志记录等),它可以提供有用的信息。