我尝试在最新的 Express 版本上使用 Socket.IO 但没有成功。 我想在带有“router”的特定 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>
如何在它们之间建立连接?
最佳答案
你需要让套接字监听服务器的端口。在 addPost.js 中像这样:
function listenServer(){
io = require('socket.io').listen(server)
}
如果您不想在应用程序文件中执行此操作,则应该将链接发送到服务器的套接字。你的 app.js 中类似这样的东西:
var server = http.createServer(app);
server.listen(app.get('port'), function(){
log.info('Express server listening on port ' + app.get('port'));
});
var socket = require('addPost.js');
socket.listenServer(server);
关于node.js - Socket.io表达不同的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32819612/