使用Express实现Socket.io

15

我有一个项目,正在使用socket.io和express,

现在我需要(已经尝试过)从express操作中广播一条消息。 我不知道如何获取发送或广播的引用,请问这是否可能?

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

其他一些使用express+socket.io的东西在我这里也起作用 :)

4个回答

4

您可能想看看我的socket.io + Express入门指南。您需要的内容在那里有详细介绍。

// 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回调函数中。


4
只要我理解正确,为什么不使用socket消息类型作为事件,而不是http的get或post?在客户端上,您可以通过websocket发送带有事件属性的消息。因此,在您的情况下:
<script>
  // 初始化socket.io...
// 然后 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(...); } }); });

0

请查看我的示例存储库,其中我使用ExpressJS + Juggernaut(通过socket.io进行发布/订阅):

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

这可能对你的需求来说有点过于复杂,因为它使用了发布/订阅模式。但是,在某种程度上,它解决了你使用常规 ExpressJS 路由的问题。克隆代码仓库后,请检查主分支:
``` git checkout master ```

当我执行“git clone git://github.com/shripadk/express-juggernaut.git”时,我会得到这个错误:“fatal: The remote end hung up unexpectedly”。 - ibmkhd
'sys'模块现在被称为'util'。它应该有一个类似的接口。 node.js:50 throw e; // process.nextTick error, or 'error' event on first tick ^ 错误:找不到模块“utils” 在resolveModuleFilename(node.js:265:13) 在loadModule(node.js:231:20) 在require(node.js:291:14) 在Object.<anonymous>(/home/ibrahim/ws/Lebanon/staTest/express-juggernaut-demo/lib/support/juggernaut/lib/juggernaut/channel.js:2:13) 在Module._compile(node.js:348:23) 在Object..js(node.js:356:12) 在Module.load(node.js:279:25) - ibmkhd
在loadModule (node.js:251:12)处 在require (node.js:291:14)处 在/home/ibrahim/ws/Lebanon/staTest/express-juggernaut-demo/lib/support/juggernaut/lib/juggernaut/publish.js的Object.<anonymous>中(第4行,第15列) - ibmkhd
使用 node v0.2.4!我猜你在使用 node v0.3.0!你需要等到所有模块都能与 v0.3.0 兼容才能使用那个版本。 :) - Shripad Krishna
不要接受如果它没有帮助到您。这违反了stackoverflow社区规则 :) - Shripad Krishna
显示剩余6条评论

0

我找到了一个很好的例子,教我如何做我需要的事情,但是使用Faye,链接在这里http://nodecasts.org/

我不知道Juggernaut、Faye和直接使用Socket.io之间的区别,但是对于我的情况来说,Faye很好。而且我认为它们两个都在内部使用Socket.io。


1
Faye 内部不使用 socket.io。它基于 Bayeux 协议。然而,它很好 :) - Shripad Krishna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接