2017-02-09 9 views
0

を解決するには、私のサーバーここで私はSocket.ioセットアップしようとしていますが、そのは、このような404を与え、私はNode.jsのに新しいですどのようにこの

socket.io-1.4.7.js:1 GET http://localhost:9000/socket.io/?EIO=3&transport=polling&t=LeZf0Tg 404 (Not Found)Request.create @ socket.io-1.4.7.js:1Request @ socket.io-1.4.7.js:1XHR.request @ socket.io-1.4.7.js:1XHR.doPoll @ socket.io-1.4.7.js:1Polling.poll @ socket.io-1.4.7.js:1Polling.doOpen @ socket.io-1.4.7.js:1Transport.open @ socket.io-1.4.7.js:1Socket.open @ socket.io-1.4.7.js:1Socket @ socket.io-1.4.7.js:1Socket @ socket.io-1.4.7.js:1Manager.open.Manager.connect @ socket.io-1.4.7.js:2(anonymous function) @ socket.io-1.4.7.js:3 
socket.io-1.4.7.js:1 GET http://localhost:9000/socket.io/?EIO=3&transport=polling&t=LeZf1h_ 404 (Not Found) 

socket.ioで404を取得していますサイドのコードは、私はソケット接続

<html> 
<body> 
    <p class="dancing">Simple Blog</p> 

    <div class="social-icons"> 
     <a href="https://twitter.com" target="_blank"> 
      <i class="fa fa-twitter-square"></i> 
     </a> 
     <a href="https://github.com/" target="_blank"> 
      <i class="fa fa-github-square"></i> 
     </a> 
     <a href="https://www.linkedin.com" target="_blank"> 
      <i class="fa fa-linkedin-square"></i> 
     </a> 
     <a href="https://www.facebook.com" target="_blank"> 
      <i class="fa fa-facebook-square"></i> 
     </a> 
    </div> 

<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> 
<script> 
    var socket = io.connect('http://localhost:9000'); 
    socket.on('news', function (data) { 
     console.log(data); 
     socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 
</body> 
</html> 

を作成するには、EJSのテンプレートエンジンを使用しています

var express = require("express"); 
var app = express(); 
var mongoose = require("mongoose"); 
var bodyParser = require("body-parser"); 
var config = require("./config/config"); 
var http = require('http').Server(app); 
var io  = require('socket.io')(http); 

// configuration 
mongoose.connect(config.database); 

// template engine 
app.set("view engine", "ejs"); 
app.engine("html", require("ejs").renderFile); 
app.set("views", __dirname + "/../client/views"); 

// use 
app.use(express.static("../client/public")); 
app.use(express.static("../client/app")); 
app.use(bodyParser.urlencoded({extended: false})); 
app.use(bodyParser.json()); 
//app.use(morgan("dev")); 



// Route handler for www requests 
app.get('/*', function (req, res, next) { 
    if (req.headers.host.match(/^www/) !== null) { 
     res.redirect('http://' + req.headers.host.replace(/^www\./, '') + req.url); 
    } else { 
     next(); 
    } 
}); 

app.use("/", require("./routes")); 
app.use("/admin", require("./routes/admin")); 
app.use("/test", require("./routes/testUser")); 

var port = process.env.PORT || 9000; 

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


var server = app.listen(port, function() { 
    var host = server.address().address; 
    var port = server.address().port; 

    console.log("app listening on " + host + " " + port); 
}); 

と私のクライアント側で誰もがO私を助けてくださいすることができますこの問題。

答えて

0

サーバーでsocket.ioの初期化を正しく実行していません。コードの

この2行:

var http = require('http').Server(app); 
var io  = require('socket.io')(http); 

は、新しいサーバが起動されることはありませんことを、新しいhttpサーバを作成し、それにsocket.ioを装着しています。

恐らくあなたがしたいのは、同じexpress serverをsocket.ioと共有することです(これは通常socket.ioがどのように使用されるかです)。

あなたのコードで

、あなたが行うことができます上記のこれらの2行を削除して、最後にここに1行を挿入して:あなたはrequire('socket.io')(http);

だから、あなたはhttpでsocket.ioを初期化している

// code you already have 
var server = app.listen(port, function() { 
    var host = server.address().address; 
    var port = server.address().port; 

    console.log("app listening on " + host + " " + port); 
}); 

// initialize socket.io to use your existing express server 
var io = require('socket.io')(server); 
+0

@ジバン - これはあなたの質問に答えましたか?そうした場合は、回答の左側にある緑色のチェックマークをクリックしてコミュニティにその旨を示すことができます。スタックオーバーフロー時の適切な手順に従うことで、あなたの評判のポイントも得られます。 – jfriend00

0

http.listen(port)のようなポートをlistenしなければなりません。似た質問がありましたhere