2013-11-15 4 views
1

при запуске socket.io local let say http://localhost:8000/ это не выбирает все папки для css и js. вот моя структура:socket.io не подбирает подпапки

<head> 
<script type="text/javascript" src="js/main.js"></script> 
<link rel="stylesheet" href="css/main.css"> 
<script src="socket.io/socket.io.js"></script> 
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
</head> 



    <script> 
    var socket = io.connect('http://localhost:8000'); 

$('.box').click(function(){ 

       var content = $(this).attr('id'); 
       //console.log(content);  
       socket.emit('click',content); 
     }); 



     socket.on('test', function(content){ 

      $(".box").css({"background":"grey"}); 
      $(".one,.two,.three,.four").hide(); 
      $("#"+content).css({"background":"red"}); 
      $("."+content).fadeIn(); 

      //$('.box').css({"background":"grey"}); 

     }); 
    </script> 

server.js:

var app = require('http').createServer(handler), 
     io = require('socket.io').listen(app), 
     fs = require('fs'); 

    // creating the server (localhost:8000) 
    app.listen(8000); 

    // on server started we can load our client.html page 
    function handler(req, res) { 
     fs.readFile(__dirname + '/client.html', function(err, data) { 
     if (err) { 
      console.log(err); 
      res.writeHead(500); 
      return res.end('Error loading client.html'); 
     } 
     res.writeHead(200); 
     res.end(data); 
     }); 

io.sockets.on('connection', function(socket){ 

    socket.on('click', function(data){ 
     io.sockets.emit('test',data); 
    }); 


}); 

консоль метательные это ниже, что не может быть найдено:

"http://localhost:8000/css/normalize.css". 
"http://localhost:8000/css/main.css". 

Может кто-то помочь, пожалуйста?

второй вопрос:

Я новичок в этом, так что не уверен, если это не звучит глупо. Но я хотел бы запустить это из фактического каталога, скажем: http://localhost/test/test2:8000 вместо http://localhost:8000/

+0

Осмотрите свою функцию 'handler': она всегда отправляет' client.html'. (Файл 'socket.io.js' обслуживается отдельным обработчиком, присоединенным к сокету.io.) Вы должны основывать свой ответ на URL-адресе запроса в [' req.url'] (http://nodejs.org/ апи/http.html # http_message_url). – apsillers

ответ

1

Вы, кажется, неправильно понимаете роль Socket.io. Эта библиотека javascript обрабатывает связь в реальном времени между клиентами и вашим сервером. В вашем коде вы вообще не используете Socket.io: вы не определяете какой-либо обработчик соединений или не генерируете какое-либо событие.

Вместо этого вы должны изменить код своего HTTP-сервера для обслуживания файлов. В вашем примере вам необходимо отредактировать функцию handler, которая обрабатывает входящие запросы. Посмотрите на the documentation for the HTTP module. Ваш app является http.Server object. Ваша handler функция, согласно документации, является:

requestListener это функция, которая автоматически добавляется в the 'request' event.

, который обрабатывает http.IncomingMessage. Затем вы должны посмотреть на url property, который содержит URL-адрес, который запросил клиент, чтобы обслуживать правильный файл. В вашем примере вы всегда обслуживаете один и тот же файл: client.html.

В заключение я бы предположил, что вы должны взглянуть на некоторые библиотеки javascript, которые облегчают создание веб-сервера, например Express, или Hapi. Это будет проще для вас, чем для обработки каждого запроса вручную.

+0

Я бы предложил (как и @apsillers) отредактировать функцию 'handler'. Прочитайте параметр 'req.url' и подайте правильный файл, а не всегда отправляйте' client.html'. Чтобы облегчить это, Express.js имеет [статическое промежуточное ПО] (http://expressjs.com/api.html#app.use), которое делает именно то, что вы хотите. –

+0

Я добавил соединение и испускаю fucntions – medzi

+0

Paul Mougel благодарит вас за ответ. Но можете ли вы помочь мне переписать функцию обработчика, чтобы она выбрала все папки? – medzi

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