2015-03-22 3 views
3

В течение нескольких часов ive пытались получить socket.io, работая с экспресс-памятью. Ive начал следовать руководству this, которое дало мне рабочий отдых api.Express 4 + Socket.io = 404

Чтобы получить Socket.io работы я использовал команду

npm install socket.io 

Эти добавленную socket.io к моему node_modules режу. После этого я отредактировал мой app.js, чтобы содержать следующий код:

//LINE above var app = espress(); 
var http =  require('http').Server(app); 
var io  =  require("socket.io")(http); 
io.on('connection',function(socket){ 
    console.log("A user is connected"); 
}); 
// my routes etc 

В моей (нефрит) точки зрения я добавил следующий код:

script(src="https://cdn.socket.io/socket.io-1.2.0.js") 
script. 
    var socket = io('http://localhost/'); 

теперь, когда я бегу с НПМ начать я получаю следующее сообщение об ошибке в моем браузере и НОЙ консоли:

http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1427056664743-51 404 (not found) 

насколько я знаю, я не использую экспресс-генератор, как мотивационный почти каждый ответ на соответствующий вопрос, что я делаю неправильно?

my complete app.js

Я попытался this: но результат ошибка с портом 3000 уже используется.

+0

Для чего это стоит, я не рекомендуется загружать ваш клиент Socket.IO из CDN. Если вы загружаете с самого сервера Socket.IO, вы получите версию, соответствующую серверу. Возможно, это источник вашей проблемы. – Brad

+0

@Brad Я изменил его на локальный src (проверено и загружен), но все равно та же ошибка. –

+0

Для начала это должно быть 'require ('http'). CreateServer (обработчик)' –

ответ

10

решаемые его благодаря ответу here

var app = express(); 
var http = require("http").createServer(app); 
var io = require("socket.io")(http); 
http.listen(8080, "127.0.0.1"); 


io.on('connection',function(socket){ 
    console.log("A user is connected"); 
}); 

На клиенте:

script(src='/javascripts/socket.io-1.2.0.js') 
script. 
    var socket = io.connect("http://localhost:8080"); 

Изменение портов сделал трюк (8080 вместо 3000)

+7

Я не вижу причин, по которым порт 3000 не должен работать. Похоже, что основным моментом решения, на котором вы указали ссылку, было то, что использование app.listen не работает, поскольку socket.io может получать запросы только от http-сервера, поскольку socket.io берет сервер как его обработчик, а не экспресс-приложение. – saltthehash

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

  • Нет связанных вопросов^_^