36
votes

I am trying to get socket.io (Node library) to work.

I have the server-side js working, and it is listening. The socket.io website states simply:

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

This is nice, however, what JS file am I importing!?!

I went into the node_modules directory, where I installed socket.io through npm, and inside socket.io/lib/ is socket.io.js file. However, this is server-side (uses the phrase require(), which errors on the client).

I have spent an hour looking around and I can't get any client .js file to work.

What am I missing?

5

5 Answers

45
votes

I managed to eventually answer this for myself.

The socket.io getting started page isn't clear on this, but I found that the server side of socket.io automatically hosts the .js file on starting node, in the directory specified in the documentation:

"/socket.io/socket.io.js"

So you literally just point to this url regardless of your web app structure, and it works.

4
votes

I would suggest checking if your node_modules directory is at the top level of your app directory. Also, I do believe you need to specify a port number; you should write something like var socket = io.connect('http://localhost:1337');, where the port number is 1337.

3
votes

If you did npm install then the client socket.io file is located at node_modules/socket.io-client/dist/socket.io.js

Source: Socket get-started page

2
votes

The client is available in a few ways:

  • supplied by the socket.io server at /socket.io/socket.io.js
  • included via webpack as the module socket.io-client
  • via the official CDN https://cdnjs.cloudflare.com/ajax/libs/socket.io/<version>/socket.io.js

For the first one, the server can be configured in a couple of ways:

// standalone
var io = require('socket.io')(port);

// with existing server from e.g. http.createServer or app.listen
var io = require('socket.io')(server);
1
votes

Here you can find CDN for various versions.