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 внутри.