---
# System prepended metadata

title: Socket.io
tags: [Book, Templates]

---

# Socket.io

# Creating server
you can create new server or attach the socket server to exist server.

- create new:
    ```js
    const Server = require('socket.io');
    const io = new Server();
    ```
- attach to http server
    ```js
    io.attach(server);
    // OR
    io.attach(3000) //PORT
    ```

- serve client????
- Cors origin 
    ```js
    io.origins(['https://foo.example.com:443']);
    // OR add it in the options
    const io = require('socket.io')(3000, {
      origins: '*',
    });
    // OR using custom function
    io.origins((origin, callback) => {
      if (origin !== 'https://foo.example.com') {
        return callback('origin not allowed', false);
      }
      callback(null, true);
    });
    ```

- Namespace (used to emit events to group of users that uses that same Namespace)
    ```js
    const chatNamespace = io.of('/chat');
    chatNamespace.emmit("event", "to all chat users")
    // --------- dynamic namespaces ---------
  // client-side
    const socket = io('/dynamic-101');
    
    const dynamicNsp = io.of(/^\/dynamic-\d+$/).on('connect', (socket) => {
      const newNamespace = socket.nsp; // newNamespace.name === '/dynamic-101'

      // broadcast to all clients in the given sub-namespace
      newNamespace.emit('hello');
    });

    ```
- Rooms (like channels)
    ```js
    // 
    namespace.in(room)
    //  ===
    namespace.to(room)

    const G7 = io.of('/GSG-G7');
    oom) // namespace / server
    G7.to('good-links').emit('event', { some: 'data' });

    ```
- get all users connected to (all || server || room)
    ```js
    // io || io.of('/chat') || io.of('/chat').in("room")
    io.of('/chat').clients((error, clients) => {
      if (error) throw error;
      console.log(clients); // => [PZDoMHjiu8PYfRiKAAAF, Anw2LatarvGVVXEIAAAD]
    });
    ```
    
- set a middleware:
    ```js
    io.use((socket, next) => {
      if (socket.request.headers.cookie) return next();
      next(new Error('Authentication error'));
    });
    ```

## Events
- connect || connection
    ```js
    // can be io for all || server || room
    io.on('connect', (socket) => {
      // ...
    });
    ```

Examples
---
- [Book example](/s/book-example)
- [Slide example](/s/slide-example)
- [YAML metadata](/s/yaml-metadata)
- [Features](/s/features)

Themes
---
- [Dark theme](/theme-dark?both)
- [Vertical alignment](/theme-vertical-writing?both)

###### tags: `Templates` `Book`
