Kuska, Bertwan Erniewan, iskay amistadkuna llamkachkanku proyecto lateral nisqapi musquyninkupi: huk app chat nisqapi, chaymi chiqap pacha rimanakuykunata atichin equipokunapaq, paykunam karumanta llamkanku. Ñawpaq-tukuy codificador Bert mana anchatachu hark'ayta atin imaynachus payqa llimp'i musuq ruwanakunata qhipa-tukuy especialista amigunwan qunakuchkan. "Qaway! ¡Huk mensajeta qelqayman, hinaspan servidorman apachisqa kashan, ¡yaqa chay ratopin rikuni huk kutichiy lloqsimuqta!”, nispa. Ernie, chay backend guru, uyanta k’umuykachin. “Ichaqa, ¿imaynatataq allichanki iskay runakuna huk kutillapi rimanankupaq kallpanchakusqankuta? Aplicacionniykiqa sapa kutillanmi paginata mosoqyachin, manan ‘rikunaykichu’ rimasqaykita, chaymi mana atikunchu cheqaq tiempopi rimayta .”
Sasachakuyqa Bertpa ruwanan HTTP kaqpi llamkan maypi huk cliente huk apamuyta servidormanta mañakunan tiyan. Ernie resumenpi nin: “Llapa amigoykikuna kutichispa mensajeta apachimusunkiman hina, ichaqa chaymanta, qonqayllamanta, mana mayqen kutichiytapas rikunkichu mosoq willakuykuna kasqanmanta mosoqyachinaykikama imaraykuchus manan qhepa willakuyniykita rikuyta atinkuchu mosoqyachinaykikama chay hinataqmi HTTP llank’an!”, nispa.
Kaypi aswan allin kaq hamun: hunt'asqa pila ruwanakuna chiqa pachapi llamk'aq, WebSockets kan. Kay parte super kusikuypaq, chayrayku Erniewan Bertwan hukllawakusun chaymanta yachasun imayna WebSockets llamk'asqankuta, implementacion ruwayninku, razonamiento qhipanpi importante kayninku, chaymanta aswan achka.
WebSockets huk sapa kuti telefono waqyayman rikch'akun huk cliente (web maskaqniyki) chaymanta huk servidor kaqwan. Paykunaqa HTTP protocolomanta hukniray kanku mayqinchus kayhinata ruwan, “huk cartata apachiy, kutichiyta suyay.” WebSockets kaqwan, iskayninku munasqankumanhina mana hark'asqa rimayta atinku. WebSockets kaqpa ruwayninkuna kayhina kanku:
Ejemplo: Pukllaykunamanta sapa kuti musuqyachiq tabla de puntuación nisqapi siq’iy. HTTP kaqwan, cliente sapa kuti sapa segundo servidorman spam ruwanan tiyan, “¿Ima puntuación tikraypas?” WebSockets kaqwan, servidor willan”, META!” chay ratollapi chay pasasqan.
Bertqa kutirispa tiyaykuspan umanta raqrakun. “Ichaqa HTTP allinta llamkan yaqa llapan apps kaqpaq. ¿Imanasqataq gol postekunata kuyuchina?”, nispa. Ernieqa llamp’ullata asikuspan marcadorta hap’in, hinaspan pizarrapi imatapas qelqayta qallarikun.
Paymi nin: “Hanaqmanta qallarisun”, nispa. “Chiqap pacha kawsay musuqyachiykunata nisunman, kawsaq pukllaymanta puntuacionkuna hina. Clientekunaqa sapa segundon servidorta tapunanku: ‘¿Imapas yachanaypaq kanchu?’, nispa. Chayqa encuesta, chaymi sapa kinsa chunka segundo, tapukunayki: ‘¿Huñunakushanchischu?’, nispa. Asikunapaq hinachu, ¿aw? Hinaspapas askha ancho de banda nisqakunatan utilizan”, nispa.
WebSockets kayta muyurichin:
“HTTP allin decente kachkan imakuna mana kuyukuq kaqwan ruwaypi huk blog utaq ruru p’anqa hina. Kawsaq tinkiykunamanta rimaspa ichaqa, huk mana tukukuq tinkiyninmi necesitakun. WebSockets nisqa.”
Ernieqa lentesnintam pichan. "Chaynaqa, huk sanu rimanakuy ruwanata ruwasun", Ernie qaparimun. "Huk Node.js servidorniyuq kasunchik qhipa kaqpaq chaymanta huk React ruwanayuq kasunchik ñawpaq kaqpaq. ¿Listochu kachkanki?"
“Huk Node.js servidorta hap’iy imaraykuchus Socket.IO partepaq necesitanki”, Ernie nin chiqamanta usqhaylla qillqachkaptin:
npm init -y npm install express socket.io
Servidorpa sutin (server.js) :
const express = require('express'); const http = require('http'); const { Server } = require('socket.io'); const app = express(); const server = http.createServer(app); const io = new Server(server); // Serve static files (like React's build folder) app.use(express.static('public')); // Handle WebSocket connections io.on('connection', (socket) => { console.log('New user connected:', socket.id); // Listen for Incoming messages from the socket socket.on('sendMessage', (message) => { console.log('Received:', message); // Broadcast the message to everyone io.emit('receiveMessage', message); }); // Handle user disconnects events socket.on('disconnect', () => { console.log('User left:', socket.id); }); }); server.listen(3000, () => { console.log('Visit http://localhost:3000 on a browser, Server started successful on port 3000'); });
“Cliente chaymanta servidor huknin hukninwan rimayta atinku Socket.IO WebSocket tinkiykuna kamachiyninman gracias nispa. Cliente (sendMessage) ruwayta waqyaptin, sirwiq willayta llapa (io.emit) kaqninta tinkisqa kaqkunaman apachin. Yaqa derecho, ¿aw?”, nispa.
“Kunanqa turnoymi. React clientepi llamkayman yaykusun”, nispan Bert nin.
npx create-react-app chat-client cd chat-client npm install socket.io-client
Rimanakuy componente (Chat.js) :
import { useState, useEffect } from 'react'; import io from 'socket.io-client'; // Connect to the server const socket = io('http://localhost:3000'); function Chat() { const [message, setMessage] = useState(''); const [messages, setMessages] = useState([]); useEffect(() => { // Listen for new messages socket.on('receiveMessage', (newMessage) => { setMessages([...messages, newMessage]); }); }, [messages]); const sendMessage = () => { if (message.trim()) { socket.emit('sendMessage', message); setMessage(''); } }; return ( <div style={{ padding: '20px' }}> <div> {messages.map((msg, index) => ( <p key={index}>{msg}</p> ))} </div> <input value={message} onChange={(e) => setMessage(e.target.value)} onKeyPress={(e) => e.key === 'Enter' && sendMessage()} /> <button onClick={sendMessage}>Send</button> </div> ); } export default Chat;
Imaynatataq Llamk'achkan :
Prueba Chayta : .
Kaymi Bert ruwayta munarqa ruwanapi hapipakuspa, ichaqa Ernie riman, “Aswan chiqa kawsay ruwanakuna huk chhika pantay allichayta necesitanku chaymanta huk ñanta wiñachiypaq marcota mast’arinankupaq”. Wakin sasachakuykunata qhawarisun.
React cliente kaqpi huk musuq tinkinakuy estrategia ruway.
socket.on('disconnect', () => { console.log('Disconnected. Trying to reconnect...'); socket.connect(); // Auto-reconnect });
WebSocket kaqmanta waqaychay chiqaqchasqa JWT tokenkuna llamk'achispa.
// On login, send a token socket.emit('authenticate', { token: 'USER_JWT' }); // Server verifies token socket.on('authenticate', ({ token }) => { if (isValidToken(token)) { socket.authenticated = true; } else { socket.disconnect(); } });
Redis llamk'achispa hukniray sirwiqpura willaykunata pasayta riqsichiy.
npm install redis
Servidorpa sutin : 1 .
const redis = require('redis'); const subscriber = redis.createClient(); subscriber.subscribe('chat-channel'); subscriber.on('message', (channel, message) => { io.emit('receiveMessage', message); });
Chat nisqamanta aswan karun: Huk rakisqa qillqata allichay
Kayqa Bertpa qatiqnin yuyayninmi - Google Docs nisqaman rikch'akuq allichaq. Ernie nin: “Web sockets nisqawanmi uyariwaq hukniray runakunaq cambiasqankuta, chaykunatataq hukllachanki”, nispa.
Kay hina :
Usuario A qillqan: “Hola” .
Usuario B “o” nisqatam hurqun hinaspa “, Mundo” nisqatapas yapan.
Servidor sapa llave ñit'iyta uyarin chaymanta llapa clientekunaman willan, sapan clientenkunapaq huk AKLLANADO qillqata ruwanankupaq.
Código Fragmento : 1.1.
// Client sends keystrokes textarea.addEventListener('input', (e) => { socket.emit('textChange', e.target.value); }); // Server broadcasts changes socket.on('textChange', (text) => { io.emit('updateText', text); });
Ernie kayta willawanchik: “¡Manan hayk’aqpas WebSockets mana HTTPS/WSS kaqwan llamk’anaykichu tiyan!”
const io = new Server(server, { cors: { origin: "https://yourdomain.com" }, });
Llapan yaykuykunata chiqaqchay chaymanta ima willaytapas ch'uyanchanapaq mayqinkunachus XSS ataques kaqman apayta atinku.
Tarifa límite kaqmanta ruway spamming ruwayniyuq ruwaqkunaman.
Tapuy: ¿WebSockets kaqpa utqaylla kaynin HTTP kaqmanta aswan allinchu?
A: ¡Arí! Chaylla ruwanakunapaq, WebSockets aswan allin kanku imaraykuchus tapuy ruway necesidadta hurqunku.
Tapuy: ¿Atikunmanchu REST APIkuna WebSockets kaqwan kuska llamk'achiyta?
R: Arí, mana iskayrayaspa! WebSockets kawsaq musuqyachiykunawan chaymanta REST kaqwan llamk'achiy CRUD ruwanakuna ruwanapaq.
Tapuq: ¿Imaynatataq huk servidor urmaptin atipayman?
R: Clientekuna kikinmanta wakmanta tinkiyta atinku (qhaway wakmanta tinkinakuy lógica patamanta).
Bertpa chat app kunan pings chiqap pacha encantowan chaymanta Ernie asirikun satisfacción. WebSockets mana rimanakuykunallapaqchu, aswanpas kawsaq tablakuna, pukllay, IoT, chaymanta aswan imapaqpas llamk'anku.
Turnoyki: Ñawpaqman riy hinaspa ejemplokunata pruebay, chinkachiy, hinaspa imapas mosoq kaqta paqarichiy. ¡Chiqap pacha appsniyki suyachkanku!