TCP implementa serviço HTTP

imagem.png

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 TCPcamada de transporte e fornecer um número de porta para monitoramento

imagem.png

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.createServerCria um soquete Unixde domínio e retorna um objeto de servidor aceitando uma função de retorno de chamada

socketPode ouvir muitos eventos

  1. closeDisparado uma vez que o soquete está totalmente fechado
  2. connectDisparado quando uma conexão de soquete é estabelecida com sucesso
  3. dataAcionado quando os dados são recebidos
  4. endDisparado 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

imagem.png

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

imagem.png

também retornou com sucesso

おすすめ

転載: juejin.im/post/7235513984555499580