Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
5 / 3 / 2
Регистрация: 06.08.2019
Сообщений: 123

Подбор собеседника

25.05.2020, 00:41. Показов 1822. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, пишу анонимный чат. Хочу сделать что-то по типу Nekto Me. Сейчас есть просто обычный чат, с кучей собеседников, так сказать. Подскажите как реализовать подбор собеседника ? Или через что реализовать ?

Вот код:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <!-- Подключение Bootstrap чтобы все выглядело красиво -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>Чат программа</title>
    <!-- Свои стили -->
    <style>
        #sms_label {
            text-align: center;
        }
    </style>
</head>
<body>
    <!-- Основная часть страницы -->
    <div class="container">
        <div class="py-5 text-center">
            <h2>Чат программа</h2>
            <p class="lead">Укажите ваше имя и начинайте переписку</p>
        </div>
        <div class="row">
            <div class="col-6">
                <!-- Форма для получения сообщений и имени -->
                <h3> </h3>
                <form id="messForm">
                    <label for="name">Имя</label><button id="bbutton" style="margin-left: 15px;">Подвердить</button>
                    <input type="text" name="name" id="name" placeholder="Введите имя" class="form-control">
                    <br>
                    <label for="message">Сообщение</label>
                    <textarea name="message" id="message" class="form-control" placeholder="Введите сообщение"></textarea>
                    <br>
                    <input type="submit" value="Отправить" class="btn btn-success" id="bbb">
                </form>
            </div>
            <div class="col-6">
                <h3 id="sms_label">Чат</h3>
                <p class="pechataet" id="pechataet"></p>
                <!-- Вывод всех сообщений будет здесь -->
                <div id="all_mess"></div>
            </div>
        </div>
    </div>
    <!-- Подключаем jQuery, а также Socket.io -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script type="text/javascript">
        $(document).ready(function(){
 
            var pechataet = $('#pechataet');
 
            $('#bbutton').on('click', function(event){
                event.preventDefault();
                $('#name').prop("disabled", true);
            })
 
            document.addEventListener('keydown', function(event) {
                pechataet.text('Печатает...');
 
 
            });
 
            document.addEventListener('keyup', function(event) {
                function pech(){
                    pechataet.text('');
                }
                setTimeout(pech, 2500);
            });
 
            document.getElementById('message').focus()
 
            $("#message").keyup(function(event){
                if(event.keyCode == 13){
                    $("#bbb").click();
                    $(this).val('');
                }
            });
 
        })
    </script>
 
    <script>
        var min = 1;
        var max = 6;
        var random = Math.floor(Math.random() * (max - min)) + min;
 
        var alertClass;
        switch (random) {
            case 1:
            alertClass = 'secondary';
            break;
            case 2:
            alertClass = 'danger';
            break;
            case 3:
            alertClass = 'success';
            break;
            case 4:
            alertClass = 'warning';
            break;
            case 5:
            alertClass = 'info';
            break;
            case 6:
            alertClass = 'light';
            break;
        }
 
        $(function(){
            var socket = io.connect();
 
            var $form = $("#messForm");
            var $name = $("#name");
            var $textarea = $("#message");
            var $all_messages = $("#all_mess");
 
 
            $form.submit(function(event){
                event.preventDefault();
 
                socket.emit('send mess', {mess: $textarea.val(), name: $name.val(), className: alertClass});
 
                $textarea.val('');
            });
 
            socket.on('add mess', function(data){
                $all_messages.append("<div class='alert alert-" + data.className + "'><b>" + data.name + "</b>: " + data.mess + "</div>");
            });
        });
    </script>
 
</body>
</html>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
 
 
server.listen(3000);
 
 
app.get('/', function(request, respons) {
    respons.sendFile(__dirname + '/index.html');
});
 
 
connections = [];
 
io.sockets.on('connection', function(socket) {
    console.log("Успешное соединение");
    connections.push(socket);
 
    socket.on('disconnect', function(data) {
        connections.splice(connections.indexOf(socket), 1);
        console.log("Отключились");
    });
 
    socket.on('send mess', function(data) {
        io.sockets.emit('add mess', {mess: data.mess, name: data.name, className: data.className});
    });
 
 
});
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2020, 00:41
Ответы с готовыми решениями:

Вывод собеседника
Суть проблемы такова: есть таблица, в ней колонки to и from (to - кому пишем, from - от кого пришло) Надо сделать так, чтобы на страницу...

Симулятор собеседника?
Ребята, привет. Хочу задать вопрос. Я хочу сделать программу, в которой пишешь например: 1 - программа отвечает 2. Допустим. Вопрос: Как...

Имитация собеседника
Есть желание реализовать максимально реалистичного компьютерного собеседника. Выглядит это так. Беседу &quot;ведет&quot; компьютер....

6
Эксперт JS
 Аватар для Iverycool
1586 / 796 / 362
Регистрация: 01.02.2019
Сообщений: 1,047
25.05.2020, 06:41
Voodas, Вы должны хранить массив всех юзеров, фильтровать по свободным и соединять
1
5 / 3 / 2
Регистрация: 06.08.2019
Сообщений: 123
25.05.2020, 12:50  [ТС]
Цитата Сообщение от Iverycool Посмотреть сообщение
Voodas, Вы должны хранить массив всех юзеров, фильтровать по свободным и соединять
Я это понимаю. Я не совсем понимаю как соединять свободных пользователей между собой. Если вы посмотрите в мой код, то увидите что у меня сообщения высвечиваются сразу у всех пользователей) А как высвечивать только у двоих ?
0
Эксперт JS
 Аватар для Iverycool
1586 / 796 / 362
Регистрация: 01.02.2019
Сообщений: 1,047
25.05.2020, 17:01
Voodas, ну вы хоть чуть-чуть по-соображайте
Допусти в событии 'send mess' можно добавить поле for - то есть для кого, тогда обработчик на сервере может быть таким:
JavaScript
1
2
3
4
socket.on('send mess', function(data) {
  if (data.for) sockets.find(/*находим получатель*/).json.send({event: 'add mess', mess: data.mess, name: data.name, className: data.className});
  else io.sockets.emit('add mess', {mess: data.mess, name: data.name, className: data.className});
});
Как клиенту передать идентификатор получателя вы должны решить сами.
Кстати в курсе Кантора как раз таки мессенджер делается, посмотрите
0
5 / 3 / 2
Регистрация: 06.08.2019
Сообщений: 123
26.05.2020, 15:09  [ТС]
Цитата Сообщение от Iverycool Посмотреть сообщение
Кстати в курсе Кантора как раз таки мессенджер делается, посмотрите
Там не совсем то, что я хочу. Я хочу создать анонимный чат наподобие Nekto me. Чтобы был подбор собеседника. Например на сайт зашло 10 людей, нажали поиск и они все будут добавлены не в один чат, а в чаты по два человека.
0
Эксперт JS
 Аватар для Iverycool
1586 / 796 / 362
Регистрация: 01.02.2019
Сообщений: 1,047
26.05.2020, 15:12
Voodas, я вам показал прототип
0
Всегда онлайн
 Аватар для MrOnlineCoder
1084 / 788 / 295
Регистрация: 07.04.2013
Сообщений: 2,703
26.05.2020, 18:04
Лучший ответ Сообщение было отмечено Voodas как решение

Решение

Voodas, в socket.io есть понятие комнат - https://socket.io/docs/server-... m-callback. Вы его можете использовать для того чтобы отправлять сообщение конкретным клиентам.

Например, подключились к вашему чату 10 человек, вы либо по таймеру, либо в момент когда подключился 10 человек, делаете случайным образом пары по два сокета, и добавляете их к комнате, дав ей уникальное имя типа chat_3dn02nd3nv20 Клиентам отправляйте номер комнаты, после чего они могут отправлять сообщение вместе с этим именем комнаты. В результате сервер знает кому еще отправить сообщение.

Можно конечно и самому хранить в памяти/массиве пары собеседников, но с помощью комнат вы с легкостю можете перейти и к чатам по 3, 4 человека.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.05.2020, 18:04
Помогаю со студенческими работами здесь

Собеседника практически не слышно
Если разговаривать по обычному городскому телефону, то бывает, что собеседника, который позвонил, практически не слышно или даже ради можно...

Skype, не слышно собеседника
Всем доброго дня. Принесли планшет Asus (к сожалению ни модель ни серийник не видно - затерто напрочь) на андроиде - все хорошо. только в...

Skype. Не вижу собеседника
Собеседник себя ВИДИТ во время разговора! Говорит, у него ни каких проблем ни с кем не было. Я звонил к нему с 4-х разных устройств 2-х...

Не слышу собеседника в Skype
Здравствуйте! Всех с новогодними праздниками и Рождества Христова! Всех благ Вам, вашим семьям и близким! У меня винда 7 домашняя базовая....

Прерывистая слышимость собеседника
Добрый день! Кто может разрулить в чём дело. Есть три адреса в городе, три SIP телефона и один провайдер с одинаковой скоростью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru