2015-10-22 6 views
2



Использование Socket.io с чистым гнездом в nodejs

Есть ли способ, что я могу использовать socket.io с чистым гнездом в nodejs? поэтому в конце у меня есть основной сервис, который слушает порт, ожидая подключения (сетевой сокет) и основного, в то время как вы хотите, чтобы клиент захотел установить соединение, используя socket.io.

Пример сценария:

  • Главная служба работает листинг на порт X для любого запроса соединения от обслуживания клиентов.

  • открыт веб-браузер клиента подключен к основной службе с помощью HTTP-сервер

  • в случае любых входящих данных от клиентского сервиса (сервер B) через гнездо сети, данные будут передаваться через socket.io, чтобы подключены браузер открытия клиента.



Digram

+0

могли бы вы указать, что вы имеете в виду 'NET SOCKET'? Это какой-то конкретный протокол? – Marek

+0

NET SOCKET - это соединения сокетов, nodejs называют его модулем сети. https://nodejs.org/api/net.html#net_server_listen_port_hostname_backlog_callback –

ответ

1

Nodejs позволяют открыть 2 порта в том же процессе бега. Следующий пример показывает:

  • Главная список услуг по порту 8124 для любого входящего соединения сокета с использованием чистого гнезда.

  • Главная служба прослушивает порт 8081 для любого входящего соединения HTTP и клиент может получить любые данные из основного сервиса с помощью Socket.io

Expressjs версии: 4.13.3
Socket.io версии : 1.3.7

Пример:

Главная служба

var express = require('express'); 
var app = express(); 
var server = require("http").Server(app); 
var io = require("socket.io")(server); 
var net = require('net'); 


var netServer = net.createServer(function(c) { 
    console.log('client connected'); 

    c.on('end', function() { 
    console.log('client disconnected'); 
    }); 

    c.write('hello\r\n'); 
    c.pipe(c); 
}); 

// main service listing to any service connection on port 8124 
netServer.listen(8124); 

app.get('/', function (req, res) { 
    res.sendFile(__dirname+'/index.html'); 
}); 

app.use(express.static(__dirname+'/static')); 

io.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 
server.listen(8081); 

Client Service (Server B):

var net = require('net'); 

var client = new net.Socket(); 
client.connect(8124, '127.0.0.1', function() { 
    console.log('Connected'); 
    client.write('Hello, server! Love, Client.'); 
}); 

client.on('data', function(data) { 
    console.log('Received: ' + data); 
}); 

client.on('close', function() { 
    console.log('Connection closed'); 
}); 

index.html

<script src="/js/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8081'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script>