server.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. const WebSocket = require('ws');
  2. const Redis = require('ioredis');
  3. const wsServer = new WebSocket.Server({ port: 9000 });
  4. const redis = new Redis({
  5. port: 6379,
  6. host: "redis",
  7. username: "default",
  8. password: process.env.REDIS_PASSWORD,
  9. db: 0,
  10. });
  11. wsServer.on('connection', onConnect);
  12. function onConnect(wsClient) {
  13. console.log('New connection');
  14. wsClient.on('close', function() {
  15. console.log('Connection closed');
  16. });
  17. wsClient.on('message', function(message) {
  18. console.log(message);
  19. try {
  20. const jsonMessage = JSON.parse(message);
  21. switch (jsonMessage.action) {
  22. case 'ECHO':
  23. wsClient.send(jsonMessage.data);
  24. break;
  25. case 'PING':
  26. setTimeout(function() {
  27. wsClient.send('PONG');
  28. }, 2000);
  29. break;
  30. default:
  31. console.log('Неизвестная команда');
  32. break;
  33. }
  34. } catch (error) {
  35. console.log('Ошибка', error);
  36. }
  37. });
  38. redis.subscribe("actions", (err, count) => {
  39. if (err) console.error(err.message);
  40. console.log(`Subscribed to ${count} channels.`);
  41. });
  42. redis.on("message", function (channel, data) {
  43. wsClient.send(data);
  44. data = JSON.parse(data).data;
  45. console.log(`send new message to user ${data.user_id} in the channel '${channel}'.`);
  46. });
  47. }