| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- const WebSocket = require('ws');
- const Redis = require('ioredis');
- const wsServer = new WebSocket.Server({ port: 9000 });
- const redis = new Redis({
- port: 6379,
- host: "redis",
- username: "default",
- password: process.env.REDIS_PASSWORD,
- db: 0,
- });
- wsServer.on('connection', onConnect);
- function onConnect(wsClient) {
- console.log('New connection');
- wsClient.on('close', function() {
- console.log('Connection closed');
- });
- wsClient.on('message', function(message) {
- console.log(message);
- try {
- const jsonMessage = JSON.parse(message);
- switch (jsonMessage.action) {
- case 'ECHO':
- wsClient.send(jsonMessage.data);
- break;
- case 'PING':
- setTimeout(function() {
- wsClient.send('PONG');
- }, 2000);
- break;
- default:
- console.log('Неизвестная команда');
- break;
- }
- } catch (error) {
- console.log('Ошибка', error);
- }
- });
- redis.subscribe("actions", (err, count) => {
- if (err) console.error(err.message);
- console.log(`Subscribed to ${count} channels.`);
- });
- redis.on("message", function (channel, data) {
- wsClient.send(data);
- data = JSON.parse(data).data;
- console.log(`send new message to user ${data.user_id} in the channel '${channel}'.`);
- });
- }
|