配置环境
前端环境:“socket.io-client”: “2.2.0” 后端环境:“socket.io”: “2.2.0”, 均在package.json中加上即可
在www服务器上引入socket.io模板
var socketIo
= require("socket.io");
var io
= new socketIo(server
);
在webpack打包全局配置语法
new webpack.ProvidePlugin({
io
: 'socket.io-client',
'window.io': 'io',
}),
webpack反向代理配置
'/socket.io/*': {
target
: 'http://localhost:3000',
host
: 'http://localhost:3000',
secure
: false,
onProxyRes
: function onProxyRes(proxyRes
, req
, res
) {
}
},
www服务器作为服务端
io
.on("connection", function (socket
) {
console
.log("连接成功");
socket
.on('generate.html-register', function (id
, msg
) {
socket
.join('room')
});
socket
.on('href.html-register', function (id
, msg
) {
socket
.join('room')
});
socket
.on('wechatLoginSuccessCallback', function (roomId
) {
console
.log("服务器收到需要通知的客户端id:", roomId
);
socket
.broadcast
.to(roomId
).emit("wechatLoginSuccessCallback", '');
})
socket
.on('upload_file_success', function (msg
) {
socket
.broadcast
.to('room').emit("generate.html-uploadSuccess", '');
socket
.emit("generate.html-uploadSuccess", '');
})
});
module
.exports
= io
;
客户端使用
var socket
= io
.connect();
socket
.emit("generate.html-register", '');
socket
.on("generate.html-uploadSuccess", function (data
) {
$('#shadow').css("display","block");
document
.documentElement
.style
.overflowY
= 'hidden';
setTimeout(function () {
$('#shadow').css("display","none");
document
.documentElement
.style
.overflowY
= 'scroll';
window
.location
.href
= "preview.html";
},5000);
});
一般来说只有前端才能向后端请求,请求完成后端再做出响应反馈给前端。而socket.io机制就解决了后端可以主动向
前端发出请求,通过该原理即可实现聊天室的功能