-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
75 lines (68 loc) · 2.42 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
var http = require('http'),
fs = require('fs'),
path = require('path'),
mime = require('mime'),
servidorChat = require('./lib/chat_server.js');
cache = {};
// Nome auto-explicativo
function enviar404(resposta) {
resposta.writeHead(404, {'Content-Type' : 'text/plain'});
resposta.write('Error 404: Recurso Não Encontrado');
resposta.end();
};
// Nome auto-explicativo
function enviarArquivo(resposta, endArquivo, contArquivo) {
/* Caso exista o arquivo, o servidor irá mandar uma resposta
* ao cliente com 200 ( confirmação padronizada do HTTP )
* e o arquivo, seu tipo será pego pelo "mime.getType"
*/
resposta.writeHead(
200,
{'Content-Type' : mime.getType(path.basename(endArquivo))}
);
resposta.end(contArquivo);
};
/* Ao invés de enviar o arquivo por meio de upload do sistema
* toda vez que algum cliente solicitar a página, ele irá enviar
* só ao primeiro pedido que solicitar tal arquivo. Quando isso
* acontecer, ele irá automaticamente salvar os dados do arquivo
* numa variável para fácil, ágil e leve consulta, assim enviando
* o arquivo de forma mais rápida para as solicitações subsequentes.
*/
function servidorEstatico(resposta, cache, endAbsoluto){
if (cache[endAbsoluto]) {
enviarArquivo(resposta, endAbsoluto, cache[endAbsoluto]);
} else {
fs.exists(endAbsoluto, function(existe){
if (existe){
fs.readFile(endAbsoluto, function(err, data) {
if (err) {
enviar404(resposta);
} else {
cache[endAbsoluto] = data;
enviarArquivo(resposta, endAbsoluto, data);
};
});
} else {
enviar404(resposta);
}
});
};
};
// Cria o servidor HTTP.
var servidor = http.createServer( function( pedido, resposta){
var endArquivo = false;
if (pedido.url == '/'){
endArquivo = 'public/index.html';
} else {
endArquivo = 'public' + pedido.url;
}
var endAbsoluto = './' + endArquivo;
servidorEstatico(resposta, cache, endAbsoluto);
});
// console.log explicativo.
servidor.listen(8125, function() {
console.log("Servidor aberto na porta 8125");
});
// Conecta com o Sockets.IO.
servidorChat.conectar(servidor);