Nos capítulos anteriores, já falamos sobre o modelo de referência de sete camadas. Hoje começamos 传输层
implementando 应用层
o serviço http
Use o módulo de rede nativo do nodejs para passar pela TCP
camada de transporte e fornecer um número de porta para monitoramento
Criar um serviço TCP
import net from 'net'
const server = net.createServer((socket) => {
socket.on('data', (data) => {
console.log('data is', data.toString())
socket.write('hello from server')
})
})
server.listen(8080, () => {
console.log('server is listening', server.address())
})
net.createServer
Cria um soquete Unix
de domínio e retorna um objeto de servidor aceitando uma função de retorno de chamada
socket
Pode ouvir muitos eventos
close
Disparado uma vez que o soquete está totalmente fechadoconnect
Disparado quando uma conexão de soquete é estabelecida com sucessodata
Acionado quando os dados são recebidosend
Disparado quando a outra extremidade do soquete indica o fim de uma transferência, encerrando assim a extremidade legível do soquete
Depois de iniciar pelo nó index.js, usamos o navegador para visitar
Você pode ver que o navegador enviou uma solicitação http get e podemos retornar conteúdo relevante por meio da palavra-chave get, por exemplohtml
import net from 'net'
let html = `
<h1>BLG</h1>
`
let headers = [
'HTTP/1.1 200 OK',
'Content-Type: text/html',
`Content-length:${html.length} `,
`Date:${new Date()}`,
'Connection: keep-alive',
//'Transfer-Encoding: chunked',
'\r\n',
html
]
const server = net.createServer((socket) => {
socket.on('data', (data) => {
let msg = data.toString()
if(/GET/.test(msg)){
console.log(headers.join('\r\n'));
socket.write(headers.join('\r\n'))
socket.end()
}
// console.log('data is', data.toString())
// socket.write('hello from server')
})
})
server.listen(8080, () => {
console.log('server is listening', server.address())
})
Ao interceptar a solicitação get para simular a mensagem relacionada ao cabeçalho da solicitação para retornar um html para ver se o navegador pode reconhecê-lo
também retornou com sucesso