Създавам просто приложение за чат, което изпраща съобщения през redis pub/sub канал. Не използвам никакви опции за влизане, просто позволявам на потребителя да избере потребителско име и да разговаря. Опитвам се да внедря частен чат, при който един клиент може да комуникира с друг клиент за свързване. Нов съм в програмирането на клиенти за чат, опитвам се да разбера как да комуникирам само с един клиент. Кои са някои от опциите, които бих могъл да обмисля, за да получа възможност за чат 1 на 1? Нямам нищо против да променя архитектурата си, за да включа нов инструмент. Всички предложения се оценяват
Свързване с конкретни клиенти в приложение за чат
Отговори (2)
Направих нещо подобно със сурови сокети. Задържах потребителски обекти, които съдържаха свързания сокет, името и дали те чатят. Ако потребителят не е в чата, той може да напише команда /list users
, която дава списък на потребителите, свързани в момента. Когато намери с кого да чати, въвежда командата /chat bob
. Ако потребителят bob
вече разговаря, той ще получи съобщение от сървъра, че bob is in a chat already
. В противен случай ще се установи чат сесия между двамата потребители. Сега те ще бъдат в чата, докато един от тях влезе /endchat
. Тогава те ще могат да намерят нови хора, с които да разговарят.
Номерът е в внедряването на сървъра, така че да може да проследява списък с потребители и техния статус в чата и с кого са в чата, така че когато напишат /endchat
, другият потребител може да бъде уведомен.
Предполагам, че комбинацията от Nodejs + Socket.io ще реши проблема ви. По-конкретно функционалността на стаите е това, което търсите тук.
Да приемем, че имате двама потребители bob и gob. Като се има предвид, че и двете са онлайн (въпреки че можете да добавите Redis като магазин за сесии и за съхраняване на история по-късно, което направих в моя случай). Кажете, че Боб иска да разговаря с Гоб, той избира Гоб. Сега накарайте Боб да се присъедини към стая с помощта на
var roomname = 'bob'>'gob'?'bob'+'gob':'gob'+'bob' ;
//this type of naming ensures roomname is same for both users
socket.join(roomname);
Това ще работи само ако и двамата са избрали един друг. Така че сега, когато gob избере bob, и двамата се присъединяват в една и съща стая. Всеки път, когато някой изпрати съобщение, накарайте го да излъчва към тази стая, като използва
socket.broadcast.to(roomname).emit('message_event',msgObj);
Уверете се, че сте добавили слушателя
socket.on('message_event',messageHandler);
Когато чатът приключи, накарайте ги да напуснат стаята, като използвате
socket.leave(roomname);