【发布时间】:2015-09-28 09:26:18
【问题描述】:
我正在尝试在最新的 express 版本上使用 Socket.IO,但没有成功。 我想在特定的 js 文件上使用 Socket.IO 功能,使用“路由器”而不是“app.js”,即全局文件。
另外,我希望服务器端与客户端不同。
这是我的代码:
-
服务器端,一个名为“addPost.js”的文件,位于“routes”文件夹中:
router.get('/', function(req, res, next) { io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); res.render('addPost'); }); -
客户端,一个名为“index.ejs”的文件位于“views”文件夹中,它与“addPost.js”无关:
<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script> var socket = io.connect('http://localhost:3000/'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script>
我怎样才能在它们之间建立联系??
【问题讨论】:
-
将 io.on('connection'... 放在 router.get.... 内没有意义。io.on(...) 只需要运行一次,你每次运行它有人到达您的路由的时间。您应该将套接字逻辑与路由器分开,因为它们不相关,尽管它们可能使用相同的数据。
-
@Molda,您能详细说明您的评论吗?具体来说,将套接字逻辑与路由器分开?我遇到了类似的问题,我不确定如何在 server.js 中设置连接后访问其他路由上的套接字。理想情况下,应该有一个 res.socket 对象来向客户端发出事件,但我还没有找到这样的功能。
-
@JonathanKempf 检查我的答案
标签: node.js sockets express websocket socket.io