Приложение для чата с использованием Socket.io и Node.js

Я разрабатываю приложение для чата, используя Node.js и Socket.io. Вот мой код.|

сокет.js

var io = require('socket.io').listen(8001);
var http = require('http');
var url = require('url');
var fs = require('fs');
// open the socket connection
io.sockets.on('connection', function (socket) {

   // listen for the chat even. and will recieve
   // data from the sender.
   socket.on('chat', function (data) {

      // default value of the name of the sender.
      var sender = 'unregistered';

      // get the name of the sender
      socket.get('nickname', function (err, name) {
         console.log('Chat Message By: ', name);
         console.log('error ', err);
         sender = name;
      });

      // broadcast data recieved from the sender
      // to others who are connected, but not
      // from the original sender.
      socket.broadcast.emit('chat', {
         msg : data,
         msgr : sender
      });
   });

   // listen for user registrations
   // then set the socket nickname to
   socket.on('register', function (name) {

      // make a nickname paramater for this socket
      // and then set its value to the name recieved
      // from the register even above. and then run
      // the function that follows inside it.
      socket.set('nickname', name, function () {

         // this kind of emit will send to all! :D
         io.sockets.emit('chat', {
            msg : "Hello " + name + '!',
            msgr : "Mr.Server"
         });
      });
   });

});

index.html

<html>
   <head>
        <script src="/socket.io/socket.io.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
            <script>
               var name = '';
         var socket = io.connect('http://localhost:8001');


         // at document read (runs only ones).
         $(document).ready(function(){


            // on click of the button (jquery thing)
            // the things inside this clause happen only when
            // the button is clicked.
            $("button").click(function(){

               // just some simple logging
               $("p#log").html('Sent message: ' + $("input#msg").val());

               // send message on inputbox to server
               socket.emit('chat', $("input#msg").val() );


               $("p#data_recieved").append("<br />\r\n" + name + ': ' + $("input#msg").val());

               // then we empty the text on the input box.
               $("input#msg").val('');
            });

            $("#btnSubmit").click(function(){
            alert("Disconnected");
            //socket.clients[kickedUserSocketId].onDisconnect();
           socket.close();
    });

            // ask for the name of the user, ask again if no name.
            while (name == '') {
               name = prompt("What's your name?","");
            }

            // send the name to the server, and the server's
            // register wait will recieve this.
            socket.emit('register', name );
         });



         // listen for chat event and recieve data
         socket.on('chat', function (data) {

            // print data (jquery thing)
            $("p#data_recieved").append("<br />\r\n" + data.msgr + ': ' + data.msg);

            // we log this event for fun :D
            $("p#log").html('got message: ' + data.msg);

         });

         socket.emit('forceDisconnect');
      </script>
   </head>
   <body>
      <input type="text" id="msg"></input>
      <button>Click me</button>
      <p id="log"></p>
      <p id="data_recieved"></p>
   </body>

<input id = "btnSubmit" type="submit" value="Disconnect"/>


</html>

Я запускаю первый socket.js из командной строки. После этого я запускаю файл .html в браузере 2 раза. Теперь 2 пользователя могут общаться через браузеры. Но когда я пытаюсь поместить свой файл .js и файл .html на сервер, который я создал с помощью FileZila и запускаю файл .js, он работает, но когда я пытаюсь запустить файл .html на стороне сервера (в этом случае FileZila ), указав IP-адрес и номер порта сервера, на котором он не работает. Можете ли вы сказать мне, в чем проблема?


person Looking Forward    schedule 01.07.2013    source источник
comment
Не могли бы вы немного пояснить? Что означает запуск файла .html на стороне сервера? А как вы видите, что он не работает? Есть ли шанс, что вы забыли убедиться, что socket.io.js находится в пути на стороне сервера?   -  person CFrei    schedule 01.07.2013
comment
run.html означает, что клиент запустит его в браузере, указав IP-адрес.   -  person Looking Forward    schedule 01.07.2013
comment
socket.io.js, где я должен внести изменения?   -  person Looking Forward    schedule 01.07.2013


Ответы (1)


Похоже, это не nodejs-проблема. У вас есть сервер, который должен быть доступен по IP-адресу с чем-то вроде 'http://your.domain.or.ip:80'.

Если вы получаете сообщение «не удается подключиться» в своем браузере, убедитесь, что на его пути нет брандмауэра и что этот порт (в примере: 80) доступен из местоположения вашего браузера (известного как «ваш компьютер»). Обратите внимание, что у вас есть служба сокетов на порту 8001, а ваш веб-сервер, возможно, работает на другом порту? Убедитесь, что оба порта открыты.

Если вы получаете пустую страницу, проверьте сообщения об ошибках javascript браузера.

Есть вероятность, что вы забыли загрузить файл «socket.io.js» в этот каталог «/socket.io/». Попробуйте загрузить этот файл напрямую, чтобы узнать, обслуживает ли ваш сервер.

person CFrei    schedule 01.07.2013