2015-06-15 3 views
0

Я пытаюсь создать приложение Node.js, в котором будет встроенный чат. Я использую socket.io для создания этого чата. Я попытался настроить свой сервер/клиент, но клиент, похоже, не подключается. У меня есть приложение для установки журнала, когда сокеты подключаются и отключаются, но, похоже, ничего не записывает. Я полагал, что клиент задерживается, так что я открыл DevTools Chrome, и напечатал:Клиент Socket.io не подключается к серверу

var socket = io(); 

странно, я начинаю видеть строку неудачных запросов, которые выглядят как:

GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1434334401655-37 404 (Not Found) 

Так что теперь я Я уверен, что это мой сервер. Вот мой код сервера:

var express = require("express"); 
var mongoose = require("mongoose"); 
var io = require("socket.io").listen(app); 
// var restAPI = require("./api"); 

// Set up the application. 
var app = express(); 
app.use(express.static("static")); 

// Mount up the rest API 
// app.use("/rest", restAPI); 

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

// This will maintian a transcript of the chat 
var transcript = [] 

// This route will return the transcript data as json 
app.get("/transcript", function(req, res) { 
    res.json(JSON.stringify(transcript)); 
}); 

// Simple socket.io for chat application 
// Lets keep a reference to how many connections we have 
var count = 0; 
io.sockets.on("connection", function(socket) { 
    // Increment the number of clients 
    count++ 
    // Keep a reference to the socket 
    var current = socket; 
    // Log the connection 
    console.log("Connected to: " + current + " at " + Date.now() + "."); 
    // Log the current number of users 
    console.log("There are now " + count + "users connected."); 

    // Handle disconnection 
    socket.on("disconnect", function() { 
     // Same routine as connect 
     console.log(current + ": disconnected at " + Date.now() + "."); 
     console.log("There are now " + count + "users connected."); 
    }); 
}); 

app.listen(3000); 

Вот мой HTML клиент:

<!DOCTYPE html> 
<html> 
    <head> 
     <meta name="viewport"> 
     <title>Paint</title> 
     <!-- <script src="/js/application.js"></script> --> 
     <script src="https://cdn.socket.io/socket.io-1.3.5.js"></script> 
    </head> 
    <body> 
     <header></header> 
     <nav></nav> 
     <aside> 
      <div id="toolbox"></div> 
      <!-- display: none; by default --> 
      <div id="chat"></div> 

      <div class="buttons"> 
       <div class="toolBoxButton">Toolbox</div> 
       <div class="chatButton">Chat</div> 
      </div> 
     </aside> 
     <section></section> 
     <footer></footer> 
     <script> 
      var socket = io(); 
     </script> 
    </body> 
</html> 

Почему не клиент подключиться?

ответ

1

Я не знаю, если это единственная проблема, но вы вызываете это:

var io = require("socket.io").listen(app); 

, прежде чем назначить переменную app так undefined.


Запрос на этот URL:

http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1434334401655-37 

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


Кроме того, я не знаю, если это:

io.sockets.on("connection", function(socket) {...}); 

работы в Socket.io v1 +. В файле socket.io doc сказано:

io.on('connection', function(socket) {...}); 
+0

Изменение 'io.sockets.on' на' io.on' ничего не изменило. Поэтому я попытался изменить, где я подключился. Я попытался поставить 'io.listen (app);' прямо перед обработчиком событий подключения, но потом он сообщает мне, что я могу: t подключить socket.io к экспресс-приложению, чтобы связать его с 'http.Server'. Поэтому я пытаюсь 'io.listen (http.createServer (app));', тогда я 'Undefined не является функцией' на' io.on'. –

+1

@James_Parsons - Я не могу следить за тем, что вы пробовали, не видя всей последовательности кода. Почему бы вам просто не следовать инструкциям здесь: http://socket.io/docs/? Там все написано. Вам нужно будет узнать, какую версию socket.io и какую версию Express нужно знать, какие инструкции следует выполнять. – jfriend00

+0

@ jfiriend00 спасибо за эту ссылку. Я пытался создать HTTP-сервер в руке. Wow Node.js быстро устарел! –