基于TCP传输层的net模块的小型服务器。

tcp层是http层的底层,更方便拿到请求者的响应头信息。html

响应头书写换行的时候, 注意本身的操做系统是什么。linux

  • windows下的换行是\r\n
  • linux下的换行是\n
  • mac下的换行是\r

服务器的config文件 server.confweb

port=8888
path=/web
path_position=relative
复制代码

配置文件的处理文件 config.jswindows

const fs = require('fs');
const globalConfig = {}
const conf = fs.readFileSync('./server.conf', { encoding: "utf-8" });

const confs = conf.split('\r\n');
for (var i = 0; i < confs.length; i++) {
    var tempConf = confs[i].split('=');
    if (tempConf.length < 2) {
        continue;
    } else {
        globalConfig[tempConf[0]] = tempConf[1]
    }
}
if (globalConfig.path_position == 'relative') {
    globalConfig.basePath = __dirname + globalConfig.path
} else {
    globalConfig.basePath = globalConfig.path
}
console.log(globalConfig);
module.exports = globalConfig;
复制代码

服务器文件 server.jsbash

const net = require('net');
const fs = require('fs');
const globalConfig = require('./config');
const url = require('url');

const server = net.createServer();

server.on('listening', () => {
    console.log('服务器已启动')
})

server.on('connection', (socket) => {
    socket.on('data', (data) => {
        var requestUrl = data.toString().split("\r\n")[0].split(' ')[1];
        try {
            var dataFile = fs.readFileSync(globalConfig.basePath + requestUrl);
            socket.write(`HTTP 200OK\r\n\r\n`);
            socket.write(dataFile)
        } catch{
            socket.write(`HTTP 200OK\r\n\r\n<html><body>404</body></html>`)
        }
        socket.end()
    })
})

server.listen(globalConfig.port, '127.0.0.1');
复制代码
相关文章
相关标签/搜索