tcp层是http层的底层,更方便拿到请求者的响应头信息。
响应头书写换行的时候, 注意自己的操作系统是什么。
- windows下的换行是\r\n
- linux下的换行是\n
- mac下的换行是\r
服务器的config文件 server.conf
port=8888
path=/web
path_position=relative
配置文件的处理文件 config.js
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.js
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');