Обсуждение: Лучший способ реализовать чат с помощью node.js / socket.io? - PullRequest
5 голосов
/ 20 сентября 2011

Я на самом деле говорю не о приложении общего чата, а скорее о реализации чата.

Итак, в файле node.js / socket.io я подумал о двух подходах

  1. Создание массива для каждого чата, широковещательное сообщение для всех пользователей в массиве

  2. Передает все сообщения всем пользователям, на компьютерах клиентов определяет, принадлежат ли они к чату,если это так, примите сообщение.

Слабость в 1 заключается в том, что со временем, когда вы увеличиваете масштаб, вы заполняете память сервера объектами массива, и я использую только около 80 МБ на своем хостинге.

Слабым местом в 2 является то, что широковещательная рассылка всем в конечном итоге обходится дорого, а переполнение компьютеров клиентов не сделает их счастливыми.

Я уверен, что существуют лучшие подходы к тому, как реализоватьчат, поэтому я прошу вас, ребята, помочь мне.Сначала я ищу производительность на стороне сервера, а затем на стороне клиента, и она должна быть масштабируемой.

Ответы [ 3 ]

5 голосов
/ 20 сентября 2011

Socket.IO 0.7+ представил концепцию номеров.Вероятно, это то, что вы ищете.

io.sockets.on('connection', function (socket) {
  socket.join('room name');

  // broadcast the message to everybody in the room
  socket.on('chat message', function (data) {
    socket.broadcast.to('room name').emit('chat message', data);
  });

  socket.on('leave room', function (room) {
    socket.leave(room);
  });
});

Так что нет необходимости управлять своим собственным массивом с пользователями для определенных комнат, в socket.io есть эта сборка.

1 голос
/ 20 сентября 2011

Я сделал что-то подобное здесь:

http://davidgranado.com/demos/chat_shuffle/

Вы можете проверить это, открыв несколько окон и пообщавшись с самим собой, поскольку каждый экземпляр считается человеком (это мое первое приложение для узлов).

То, как это работает, заключается в том, что каждый человек в паре с другим человеком для разговора. По сути, все находятся в комнате на двоих.

Чтобы донести сообщения, я регистрирую пользователей как связанных друг с другом и отправляю их только одному собеседнику. Эта идея может быть легко расширена на любое количество людей, чтобы связать участников чата. Таким образом, вам не нужно делать бесполезную трансляцию для всех.

0 голосов
/ 20 сентября 2011

Now.js сделает это намного проще: http://nowjs.com/guide - у их руководства уже есть как, так же как и у их github repo https://github.com/Flotype/now/tree/master/examples/multiroomchat_example

...