Express4.0集成socket.io并通过路由访问io

Express4.0集成socket.io并通过路由访问io

标签(空格分隔): Node.js


socket.io官方文档

安装socket.io中间件

npm install socket.io

启动一个socket服务

在根目录创建一个socketServer.js文件,添加一下代码

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

// socket监听3001端口
server.listen(3001,function(){
// 让socket监听3001端口
    console.log('Server listening on port:',3001);
});

// 用来监听/发送消息
// emit:发送消息  on:监听socket请求
io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

cdsocketServer.js文件所在目录,然后通过node启动socket服务

node ./socketServer.js

创建html客户端文件

views/目录下创建一个index.html文件,用来作为socket请求客户端。在index.html文件中需要做一下操作

  • 引入socket.io.js核心库文件

  • 通过socket和服务器端建立长连接

注意

建立长连接这段一定要放在核心库后面创建,因为连接时需要用到核心库中的io

在这里,我是通过给一个按钮绑定点击事件来发送和接收socket消息的

// 注意,这里的端口号要和你socket服务的端口号一致
var socket = io.connect('http://localhost:3001');
socket.on('news', function (data) {
  console.log(data);
  socket.emit('my other event', { my: 'data' });
});

在Express中设置socket的访问路由

第一次根据网上的方式通过socket客户端发送socket请求的时候,总是不成功,打开控制台发现是请求的访问路径不正确。

这个地方具体的路由请求路径需要根据自己的项目做一些调整,只要在路由访问的时候能访问到指定的文件即可

我的处理方法如下:

在项目根目录创建了一个source目录
拷贝/node_modules/socket.io-client/dist/socket.io.jssource目录下

然后在app.js文件中添加如下路由

app.get('/',function(req,res){
  res.sendfile('views/index.html');
});

app.get('/source/socket.io.js',function(req,res){
  res.sendfile('source/socket.io.js');
});

app.get('/socket.io/?',function(req,res){
  res.sendfile('./socket.js');
})

Demo地址:链接: https://pan.baidu.com/s/1gfPwmlH 密码: faaj

你可能感兴趣的:(Express4.0集成socket.io并通过路由访问io)