Próbuję włączyć komunikację tcp, http i websocket.io na tym samym porcie. Zacząłem od serwera tcp (część powyżej //// linia), działało. Następnie uruchomiłem echo server example found on websocket.io (część poniżej //// linia), również zadziałało. Ale kiedy próbuję je scalić, tcp już nie działa.Czy można włączyć tcp, http i websocket przy użyciu tego samego portu?
SO, czy można włączyć tcp, http i websockets przy użyciu tego samego portu? Czy muszę słuchać na innym porcie dla połączeń TCP?
var net = require('net');
var http = require('http');
var wsio = require('websocket.io');
var conn = [];
var server = net.createServer(function(client) {//'connection' listener
var info = {
remote : client.remoteAddress + ':' + client.remotePort
};
var i = conn.push(info) - 1;
console.log('[conn] ' + conn[i].remote);
client.on('end', function() {
console.log('[disc] ' + conn[i].remote);
});
client.on('data', function(msg) {
console.log('[data] ' + conn[i].remote + ' ' + msg.toString());
});
client.write('hello\r\n');
});
server.listen(8080);
///////////////////////////////////////////////////////////
var hs = http.createServer(function(req, res) {
res.writeHead(200, {
'Content-Type' : 'text/html'
});
res.end(['<script>', "var ws = new WebSocket('ws://127.0.0.1:8080');", 'ws.onmessage = function (data) { ws.send(data); };', '</script>'].join(''));
});
hs.listen(server);
var ws = wsio.attach(hs);
var i = 0, last;
ws.on('connection', function(client) {
var id = ++i, last
console.log('Client %d connected', id);
function ping() {
client.send('ping!');
if (last)
console.log('Latency for client %d: %d ', id, Date.now() - last);
last = Date.now();
};
ping();
client.on('message', ping);
});
HTTP zazwyczaj biegnie na szczycie TCP. Co rozumiesz przez HTTP i TCP? –
Dlatego mam wątpliwości. Mój serwer musi komunikować się z internetowymi gniazdami poprzez przeglądarki i połączenia TCP za pośrednictwem aplikacji mobilnych. Potrzebuję więc obu protokołów. –
Być może możesz nasłuchiwać jako surowego TCP, a jeśli wykryjesz HTTP, przekaż do drugiego programu obsługi ręcznie. Podobnie, jeśli wykryjesz WS z serwera HTTP (WS uruchamia się jako HTTP), deleguj ponownie. –