<prompt> Tekeleza seva rahisi ya mazungumzo na mteja kwa kutumia WebSockets katika Node.js. Seva inapaswa kuruhusu wateja wengi kuunganishwa kwa wakati mmoja na kutangaza ujumbe kwa wateja wote waliounganishwa. Kwa kuongeza, unganisha uthibitishaji wa mtumiaji kwa kutumia tokeni za JWT na hifadhi historia ya gumzo katika hifadhidata ya SQLite.PLINFORMAT  <response>: const http hitaji http;const express needexpress;const WebSocket needws;const jwt hitajijsonwebtoken;const sqlite3 needsqlite3.verbose; Anzisha hifadhidata ya SQLiteconst db new sqlite3.Database:memory:, err ikiwa kukosea console.errorerr.message; else console.logImeunganishwa kwenye hifadhidata ya SQLite ya kumbukumbu.;;db.serialize db.runCREATE TABLE messages jina la mtumiaji TEXT, ujumbe TEXT;; Usanidi wa programu ya Expressconst app express;app.useexpress.json;app.usecors; Tengeneza tokeni ya JWTapp.postlogin, req, res const username req.body; const token jwt.sign username , secret_key, expiresIn: 1h ; res.json ishara ;;const server http.createServerprogramu; Usanidi wa seva ya WebSocketconst wss WebSocket.Server mpya seva ;wss.onmuunganisho, ws, req Thibitisha tokeni ya JWT const token req.url.split?token1; jaribu jwt.verifytoken, secret_key; kukamata kosa ws.sendJSON.stringify error: Token batili ; rudisha ws.terminate; ws.onujumbe, data const username, message JSON.parsedata; Hifadhi ujumbe kwenye hifadhidata db.runINGIZA KWENYE ujumbe jina la mtumiaji, ujumbe THAMANI ?, ?, jina la mtumiaji, ujumbe; Tangaza ujumbe kwa wateja wote waliounganishwa wss.clients.forEachmteja ikiwa client.readyState WebSocket.OPEN client.sendJSON.stringify username, message ; ; ; ws.onfunga, console.logMteja amekataliwa;;server.listen3000, console.logSeva inasikiliza kwenye bandari 3000; 