I know there are a bunch of questions on this already, but none have answered it for me, and plus mine is slightly different.
I'm starting the socket.io server in node using this:
var io = require('socket.io').listen(8000);
My terminal says everything is ok:
info - socket.io started
Now I am trying to load the .js file in my clientside browser using this url:
http://<hostname>:8000/socket.io/socket.io.js
I dont get a 404, it just hangs forever. I've also used a network utility to ping port 8000, and it seems to be open fine.
I installed node and socket.io just yesterday, so they should be the latest versions. Can anyone shed any light on this? Thanks!
I know there are a bunch of questions on this already, but none have answered it for me, and plus mine is slightly different.
I'm starting the socket.io server in node using this:
var io = require('socket.io').listen(8000);
My terminal says everything is ok:
info - socket.io started
Now I am trying to load the .js file in my clientside browser using this url:
http://<hostname>:8000/socket.io/socket.io.js
I dont get a 404, it just hangs forever. I've also used a network utility to ping port 8000, and it seems to be open fine.
I installed node and socket.io just yesterday, so they should be the latest versions. Can anyone shed any light on this? Thanks!
Share Improve this question asked Mar 1, 2013 at 15:17 RichRich 5151 gold badge5 silver badges18 bronze badges 3- Have you created the http server? – Puigcerber Commented Mar 1, 2013 at 15:32
- Thats my line of thought, but the socket.io "how to use" says this: // note, io.listen(<port>) will create a http server for you var io = require('socket.io').listen(80); – Rich Commented Mar 1, 2013 at 15:36
- 1 I see that line. For what I understand, if you load socket.io without the http server, you can be listening for events in that port, but not serving the js file itself. But I'm not sure if I'm right though. – Puigcerber Commented Mar 1, 2013 at 15:44
4 Answers
Reset to default 2Turns out the reason I could never request the .js file was because my pany network blocks all ports except the usual ones (80, 21, etc), so `I would never be able to municate with port 8000.
Use express.js. Place the socket.io
file in public/javascripts
folder and add this line to your html
<script src="/javascripts/socket.io.js"></script>
I think this is the best way. When you're writing http://<hostname>:8000/socket.io/socket.io.js
node tries to find a folder named socket.io
in your project's public folder. And the file socket.io.js
in it.
If you don't want to use express.js you should catch the request and try to load a file if no routes were found for your request (what actually express does) because node doesn't know what to do for requests which don't match any routes in your server.
And I remend to use the socket.io.min.js
file (it's smaller and it's in folder node_modules\socket.io\node_modules\socket.io-client\dist
)
You have to start an http/https server to access it via http/https. Simply starting an socket.io server won't do. Do the following:
var http = require('http');
var app = http.createServer(),
io = require('socket.io').listen(app);
app.listen(7000, "0.0.0.0");
Then I can access the file http://localhost:7000/socket.io/socket.io.js
sockets.io uses websocket protocol (ws://). See the wikipedia page.
You need to get at least 3 pieces working together.
Serve some HTML (/index.html will do just fine) so there's a web page. This file should contain the socket.io client
<script>
tag. For this you need the http server portion of the starter examples. You are missing this and that's why browsing to your server just hangs.Serve the socket.io client. Socket.io will do this for you automatically when you pass in your http server function to it. You don't need full express as this can be done with just node's
http
module as per the first example on the socket.io docs.Some javascript to actually do something with the socket. This can be the content of a
<script>
tag inindex.html
or a separate file. If it's a separate file, you need to set up your http server to actually serve it.