2016-01-09 5 views
0

Im пытается получить socket.io работать. Это те пакеты, которые я использую:cant get socket.io для опроса (узел, js, express, ejs, socket.io)

"express": "~4.9.0", 
"ejs": "~0.8.5", 
"socket.io":"~1.3.3" 

мои app.js:

// loading modules 
var express = require('express'); 
var http = require('http'); 
var app = express(); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 

//routers 
var indexRouter = require('./routes/index'); 

// Setup serving static assets 
app.use(express.static('public')); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'ejs'); 


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


// Setup initial routing - index 
app.use('/', indexRouter); 


// Start the server 
server.listen(3000, function(){ 
console.log('App listening at http://localhost:3000'); 
}); 

маршрутизатор:

var express = require('express'); 
var router = express.Router(); 

router.get("/", function(req, res){ 
    res.render("index"); 
}); 

module.exports = router; 

мой шаблон

<html> 
    <head> 
    <title>Real time web chat</title> 
    <script src='/socket.io/socket.io.js' type='text/javascript'></script> 
    <script> 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 
</head> 
<body> 
    hi world! 
</body> 
</html> 

Теперь я получаю :

GET http://localhost/socket.io/?EIO=3&transport=polling&t=1452340948465-61 Net :: ERR_CONNECTION_REFUSED

Im не уверен, что им делать неправильно. Насколько я понимаю, я подключил socket.io к серверу правильными способами?

Надеюсь, что кто-нибудь может указать, что я делаю неправильно.

ответ

4

Ваш сервер узел прослушивает порт 3000. Изменение этого на стороне клиента:

var socket = io.connect('http://localhost'); 

к

var socket = io.connect('http://localhost:3000'); 

проверить также Socket.io учебника: http://socket.io/get-started/chat/

EDIT:

Я воссоздал ваш код на моем сервере. Если на стороне клиента код, как ваша:

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

в консоли я получил «Не удалось загрузить ресурс: Net :: ERR_CONNECTION_REFUSED»

Когда я меняю на стороне клиента код

<script> 
       var socket = io(); 
       socket.on('news', function (data) { 
        console.log(data); 
        socket.emit('my other event', { my: 'data' }); 
       }); 
      </script> 

все работает отлично , Похоже, что проблема заключается в инициализации переменной сокета клиента.

+0

Спасибо за комментарий, но он по-прежнему дает ту же ошибку. Раньше я использовал этот учебник как ссылку, но не мог найти, что они делают, что я не делал в своем коде. –

+1

@Merijn в вашем клиентском коде, попробуйте инициализировать socket.io без URL: var socket = io(). В соответствии с руководством он попытается подключиться к хосту, обслуживающему страницу. – Tomislav

+0

вы легенда! что это решило! –

Смежные вопросы