本文介绍如何在Node.js Express框架中集成Socket.IO模块以实现WebSocket通信。内容涵盖模块安装、app.js配置、端口监听设置及服务端与客户端代码示例,包括全局广播与单页面通信的具体实现方式。
Express集成Socket.IO配置步骤
本文介绍在Node.js环境中,基于Express框架集成Socket.IO模块以实现WebSocket通信的具体方法。
该方案经过资料查阅与实际测试验证,确认可行运行。
首先,需通过npm安装socket.io依赖模块。
npm install socket.io --save
然后打开express的app.js将模块引入,在12行左右的
var app = express();
在app.js文件约第12行代码处,添加初始化服务器实例的代码。
var server = require('http').Server(app);
var io = require('socket.io')(server);
随后,在约第20行位置添加中间件配置,将socket.io实例挂载到请求对象上。
app.use(function(req, res, next){
res.io = io;
next();
});
为避免从www目录启动应用,在app.js底部倒数第二行之前添加额外的配置代码。
var port = 3000;
app.set('port', port);
server.listen(port);
配置完成后,应用将开始监听3000端口。
至此,服务端准备工作已完成,接下来进行示例演示。
服务端与客户端通信示例
可使用官方提供的示例代码,直接写入app.js中进行测试。
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world1' });
socket.on('my other event', function (data) {
console.log(data);
});
});
服务端配置完毕后,需在客户端页面引入socket.io客户端脚本文件。
<script src='javascripts/socket.io-1.4.5.js'></script>
var socket = io.connect("//localhost:3000");
socket.on('news', function (data) {
console.log(data);
alert(data);
socket.emit('my other event', { my: 'data' });
});
打开浏览器页面即可测试连接状态。
单页面通信实现
若需实现仅在当前页面接收服务端发送的消息,可采用特定路由下的连接监听方式。
router.get('/', function(req, res, next) {
//只有当前页面可以获得
res.io.on('connection', function(socket) {
socket.emit('news', {
hello: 'world'
});
socket.on('my other event', function(data) {
console.log(data);
});
});
//所有页面都可以获得
var io = require("../app").io;
io.emit("news",{hello:"myworld"});
res.render("pclogin.ejs", {});
});
希望上述内容对Node.js程序开发有所帮助。