LoginSignup
14
10

More than 5 years have passed since last update.

socket.io 「/socket.io/socket.io.js not found 404 」でものすごく詰まった件

Posted at

素晴らしく詰まったので、備忘録。

node.jsでsocket.ioをexpressと一緒に使いたい(というか非同期バンバンやりたいからnode.jsなので)

それで「node.js+socket.io」はまぁまぁ躓きながらも大丈夫そう。

で、問題は「node.js+express+socket.io」。

express3で(とりあえず)やってみましょうと思い、socket.ioを入れてみるが「/socket.io/socket.io.js not found 404 」
になる。

もう何してもなる。

WEBあさりしてもぜんぜんなる。

それっぽいのはスタックオーバーフローのサイトにでているんだけれども、どうやら違う?

最終的には下記の回答そのままやったら無事つながりました。

(原文)
Using with the Express 3 web framework: (from socket.io)

Express 3 requires that you instantiate a http.Server to attach socket.io to first:

meaning - (1) you must create a server instance:

var app = express();
var http = require('http').createServer(app);
(2) couple it with the socket.io:

var io = require('socket.io');
io.listen(http);
and ONLY THEN - (3) make the server listen:

http.listen(8080);
make sure you keep this order!
(以上原文)

(訳)
Express 3をつこうとるとして: (socket.ioからね)

Express 3 ではhttp.Server をsocket.ioに最初にかませるんじゃ

1サーバーインスタンスを作るんじゃ!

var app = express();
var http = require('http').createServer(app);

2socket.ioと紐づけるんじゃ!

var io = require('socket.io');
io.listen(http);

3あとはserverをlistenさせるだけじゃ!

http.listen(8080);

※順番は絶対守るんじゃぞ!
(以上和訳)

何でそんなに詰まっていたかというと、ポイントとして
・express3ではhttpモジュールからcreateServerしてそいつをio.listenさせないといけない。
(expressのインスタンスをio.listenさせても動かない)
という点がはまりポイントだったんですね。

…でそのはまりポイントばかりに目がいって、「う。うごかない。。。。。汗」的な。

で、どうしたかというと、上記回答の「3」
http.listen(8080);
これね。
※cloud9では一応、
http.listen(process.env.PORT);
的な感じ。

expressのインスタンスをlistenするんじゃなくてhttpモジュルのほうをlistenさせるのね。
ほうほう。

ずっと
app.listen(8080);
ってやってたわ。

app.listenしないと動かないと思い込んでたら違った。
もすこしexpressの基礎を理解しないとなぁ、と思ったり思わなかったり。

いじょうです。

14
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
10