去年,做过一款竞赛打分的APP。具体需求,同组教师之间可以相互通信,及时通知同组人员,其他组员做了那些操作(当然,这只是针对特定操作)。
采用目前比较成熟的WebSocket技术,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择。其为HTML5的一部分,WebSocket相较于原来开发这类app的方法来说,其能使开发更加地简单。大部分现在的浏览器都支持WebSocket,比如Firefox,IE,Chrome,Safari,Opera,并且越来越多的服务器框架现在也同样支持WebSocket。
在实际的生产环境中,要求多个WebSocket服务器必须具有高性能和高可用,那么WebSocket协议就需要一个负载均衡层,NGINX从1.3开始支持WebSocket,其可以作为一个反向代理和为WebSocket程序做负载均衡。
注:看官方文档说 Nginx 在 1.3 以后的版本才支持 websocket 反向代理,所以要想使用支持 websocket 的功能,必须升级到 1.3 以后的版本
NGINX通过允许一个在客户端和后端服务器之间建立的隧道来支持WebSocket。为了NGINX发送来至于客户端Upgrade请求到后端服务器,Upgrade和Connection头部必须被设置明确。
代码实例:
upstream wsbackend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80;
server_name ws.52itstyle.com;
location / {
proxy_pass http://wsbackend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
前端配置:
$(function(){
socket.init();
});
//Nginx反向代理实现websocket
var basePath = "ws://ws.52itstyle.com//acts_competition/";
socket = {
webSocket : "",
init : function() {
if ('WebSocket' in window) {
webSocket = new WebSocket(basePath+'webSocketServer');
}
else if ('MozWebSocket' in window) {
webSocket = new MozWebSocket(basePath+"webSocketServer");
}
else {
webSocket = new SockJS(basePath+"sockjs/webSocketServer");
}
webSocket.onerror = function(event) {
//alert("websockt连接发生错误,请刷新页面重试!")
};
webSocket.onopen = function(event) {
};
webSocket.onmessage = function(event) {
};
},
sendData : function(data) {
webSocket.send(data);
},
}
最后,重启下Nginx即可。
反向代理服务器在支持WebSocket时面临的挑战
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有