2015-07-30 2 views
0

Я пытаюсь передать сообщение от клиента node.js веб-клиенту. Я предполагаю, что это должно быть сделано через сервер. Любая помощь приветствуется.socket.emit from node.js клиент для клиента браузера

Erorr я вижу в браузере:

GET http://10.1.0.47/socket.io/?EIO=3&transport=polling&t=1438260260496-8 net::ERR_CONNECTION_REFUSED

node.js Заказчик:

socket.emit('clientMessage', jsonData, 'Pi-Voyager'); 

Сервер:

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

var port = process.env.PORT || 8080; 

server.listen(port, function() { 
    console.log('Gulp is starting my app on PORT: ' + port) 
}); 

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

io.on("connection", function(socket) { 

    socket.on('clientMessage', function(jsonData, from) { 
     socket.emit('serverMessage', 'Got a message!', jsonData); 
     console.log('Data being sent from', from, 'is:\n' + jsonData); 
    }); 

}); 

веб-клиент:

<body> 
    <h1>9.html</h1> 
    <div id="messages"></div> 
    <script src="/socket.io/socket.io.js"></script> 
    <script> 

     var socket = io.connect("/"); 

     socket.on("serverMessage", function(msg) { 
      document.getElementById("messages").innerHTML += msg + "<br>"; 
     }) 

    </script> 
</body> 
+0

У вас есть одно приложение node.js в качестве клиента, одно веб-приложение в качестве клиента и сервер node.js, все отдельно? Кроме того, вам нужно отправить больше кода, так как вы получаете ошибки при подключении, а не на отправку сообщений. – ralh

+0

Да, один узел, один клиент узла и один веб-клиент, все отдельно. Вы правы, я обновил свой код, чтобы отразить более точную проблему. – CiscoKidx

ответ

2

Возможно, у вас есть сервер, прослушивающий порт 8080. И я не думаю, что ваш клиент подключается там. Попробуйте изменить

var port = process.env.PORT || 8080; 

в

var port = process.env.PORT || 80; 

Кроме того, даже если вы на самом деле подключения, вам необходимо получить два различных сокетов - от вашего веб-приложения и приложения клиентского узла. Поскольку в настоящее время вы принимаете входные данные из сокета и записываете его в один и тот же сокет - в основном, эхо-сервер.

Из обратного вызова io.on ('connect') вы получаете сокет - это соединение с клиентом SINGLE. Если вы пишете на него, вы пишете этому клиенту, если вы получите от него, вы получите от этого клиента. Чтобы сделать приложение широковещательным для всех клиентов (например, чат), вы можете это сделать.

var sockets = []; 
io.on('connection', function(socket) { 
    sockets.push(socket); 
    socket.on('clientMessage', function(jsonData) { 
     for(var i = 0, len = sockets.length; i < len; ++i) { 
      sockets[i].emit('serverMessage', 'Got a message!', jsonData); 
     } 
    }); 
}); 
+0

Спасибо. Изменение порта 80 позволило мне подключиться. Можете ли вы пояснить, что вы подразумеваете под двумя разными сокетами, хотя я смущен. – CiscoKidx

+0

Отредактировал свой ответ. – ralh

+0

Вы - bomb.com – CiscoKidx