Hola,estoy implementando <a href="http://socket.io">socket.io</a>,pero me gustaria saber si es una buena idea implemetarlo asi ? Lo que h...

Alexis Alberto Texis Auza

Alexis Alberto Texis Auza

Pregunta
studenthace 6 años

Hola,estoy implementando socket.io,pero me gustaria saber si es una buena idea implemetarlo asi ?

Lo que hago es que una vez que creo un registro,consulto los registros(GET) para ver los datos actualizados y posteriormente enviarlos como una emision al cliente

SERVER

index

import express from 'express' import bodyParser from 'body-parser' import axios from 'axios' import socketIO from 'socket.io' import { createServer } from 'http' import apiItems from './routes/index' const app = express() const server = createServer(app) //rutas app.use('/new',apiItems) //socket const io = new socketIO(server) //guardo como atributo la instancia del socket para poder usarla en las rutas app.set('io',io) //server init const port = process.env.PORT || 8000 server.listen(port, => console.log(`server on https://localhost:${port}`))

routes

import { Router } from 'express' // como ejemplo estoy consumiendo un api que ya cree con anterioridad Router.post('/',async (req,res,next) => { let item let items const { app,body } = req const io = app.get('io') try { item = await axios.post('my_url',body) items = await axios.get('my_url') } catch(e) { next(e) } io.emit('items_updates',{ data : badges.data.payload}) //emito los datos actualizados res.status(200).json({ user: badge.data }) } export default Router

CLIENT

import React,{ useEffect,useState } from 'react'; import io from 'socket.io-client' import './App.css' function App() { const [users,setUsers] = useState([]) let socket const initSocket = () => { socket = io('http://localhost:8000') socket.on('items_updates',(data) => { let users_update = users.concat(data.data) setUsers([...users_update]) }) } const getUsers = async () => { let users try { let response = await fetch('http://localhost:8000/badges') users = await response.json() setUsers([...users,...badges.data.payload]) } catch(e) { console.log(e.message) } } const handleCreate = async () => { let user const input = { key : "value", ... } try { let response = await fetch('http://localhost:8000/new',{ method : 'POST', headers : new Headers({'Content-Type' : 'application/json'}), body : JSON.stringify(input) }) user= await response.json() console.log(user) } catch(e) { console.log(e.message) } } useEffect(() => { getBadges() initSocket() },[]) return ( <div className="App"> <h3>Ejemplo socket</h3> <button onClick={handleCreate}>crear</button> <div className="container"> { users && users.map( user => <h3>{user.name}</h3>) } </div> </div> );
2 respuestas
para escribir tu comentario
    Alexis Alberto Texis Auza

    Alexis Alberto Texis Auza

    studenthace 6 años

    Ok entiendo,entonces en lugar de hacer el get lo que podria hacer ,es una vez que se guarda el registro, emitir en el socket el input del cliente y una vez que le llege actualizar(agregarlo) mi estado(array).

    Diego Forero

    Diego Forero

    Team Platzihace 6 años

    En teoría no deberías hacer un get adicional, la idea de usar sockets es que cuando se actualiza la información el socket haga push de la información a todos los clientes conectados.

Curso de Express.js

Curso de Express.js

Crea una aplicación web desde cero con Express.js, uno de los frameworks más populares de JavaScript. Genera tu web app de forma fácil y rápida gracias a sus plugins de alto rendimiento y despliega toda tu creatividad en el desarrollo de tus aplicaciones con Express.

Curso de Express.js
Curso de Express.js

Curso de Express.js

Crea una aplicación web desde cero con Express.js, uno de los frameworks más populares de JavaScript. Genera tu web app de forma fácil y rápida gracias a sus plugins de alto rendimiento y despliega toda tu creatividad en el desarrollo de tus aplicaciones con Express.