Socket.io с экспресс

У меня есть проект, и я использую socket.io с выражением,

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

app.get('/', function(req, res) {
//i need to send messages from here 
});

Другие вещи, такие как использование выражения express + socket.io, работают со мной:)

Ответы

Ответ 1

Возможно, вам захочется взглянуть на socket.io + Express primer. То, что вы хотите, подробно описано там.

// Send to all connected sockets
io.sockets.send('Hello, World!');

// Send to all sockets in a specified room
io.sockets.in('room').send('Hello, Room!');

Где io - это значение, возвращаемое вызовом socketio.listen(). Вы можете разместить этот код в любом месте своего приложения, например, в ваших обратных вызовах app.get.

Ответ 2

Пока я понимаю,

Почему бы не использовать тип сообщения сокета как событие вместо http-get или post? На стороне клиента вы отправите сообщение через websocket, чтобы сказать свойство события.

Итак, в вашем случае:

<script>
  // Initialize socket.io ...

  // and then
  socket.send({event: 'homepage loaded', foo: 'bar'});
</script>

И на стороне сервера:

var io = io.listen(server);

io.on('connection', function (client) {
  client.on('message', function (message) {
    if (message.event == 'homepage loaded') {
      client.broadcast(...);
    }
  });
});

Ответ 3

Проверьте мой пример репо, где я использую ExpressJS + Juggernaut (pubsub over socket.io):

http://github.com/shripadk/express-juggernaut-demo

Это может быть излишним для того, что вам нужно, поскольку оно использует публикацию/подписку. Но это в определенной степени решает вашу проблему использования обычных маршрутов ExpressJS. Оформить контрольную ветку после клонирования репозитория:

git checkout master

Ответ 4

Я нашел хороший пример, как сделать то, что мне нужно, но с faye it here http://nodecasts.org/.

Я не знаю разницы между Juggernaut, Faye и прямым Socket.io, но Faye хорош

для моего случая. И я думаю, что оба из них используют Socket.io внутри.