当前位置: 首页 > news >正文

怎样建立网站的快捷方式河南郑州网站顾问

怎样建立网站的快捷方式,河南郑州网站顾问,科技馆里面有什么展品,公司网站找谁做云平台中使用的socket服务器是我们自己定义一套通信协议,并通过C#实现的一个socket服务。 该服务目前是和web服务一起运行在IIS容器中,通过启动一个永不退出的新线程来监听端口。 在开发的初期,由于服务内一些消息的异常未进行捕获&#xff0…

云平台中使用的socket服务器是我们自己定义一套通信协议,并通过C#实现的一个socket服务。

该服务目前是和web服务一起运行在IIS容器中,通过启动一个永不退出的新线程来监听端口。

在开发的初期,由于服务内一些消息的异常未进行捕获,例如客户端发来的消息格式不对、试图去关闭一个已经被释放的连接 等操作,会导致监听线程意外退出。

后来随着系统的使用这些问题被一一修复,socket服务就稳定了很多,可是持续一个多周以后,socket服务还是会偶尔挂掉,查看系统日志没有发现任何系统异常。到网上查了一些关于IIS的资料,发现IIS有一套智能的进程回收机制,目的是为了提高服务器的性能,进程回收时内存中的session、cache以及正在运行的线程都会被清掉,所以采用IIS作为服务器,要保证session、cache等资源长期可用的话,要把他们放到数据库中,或者分布式的放到其他服务器中保存。进程回收后,IIS会启动新的线程,原来部署在IIS中站点的端口都会被重新监听,但是之前用户自己启动的那些线程IIS就不会给启动了。

网上有人给出一种解决方案,对IIS7进行配置:

 

回收——固定时间间隔(分钟) 改为 0

        ——虚拟/专用内存限制(KB) 改为 0

进程模型——闲置超时(分钟) 改为 0

 

这种方法会禁用IIS的进程回收,不过这样可能会导致长时间运行后服务器的性能下降。而且,经过多次尝试这样配置以后,经过很长时间的运行,IIS还是会对进程进行回收的。

 

想到IIS在进程回收之后会重启自己对运行在其上的站点的端口监听,我们自己也可以运行一个服务,来判断socket服务器的线程当前运行状态是否正常,如果不正常的话就重启服务。这个服务必须是运行在IIS之外的。

具体做法是:

web服务提供一个获取进程状态的接口 

/SocketServer.ashx?action=getThreadStatus

提供一个重启socket服务的接口

/SocketServer.ashx?action=startSocketServer

 

在IIS外部通过其他方法启动一个服务,每隔10秒访问一次获取进程状态的接口,如果不正常则调用重启socket服务的接口。

现在的做法是启动了一个Nodejs服务:

 

//此服务用来监控云平台的socket服务进程,若进程崩溃或重启,则重新启动socket服务、ws服务、任务超时检测
var http=require('http');
var moment = require('moment')
//var host="http://xxx"; //本地调试
var host="http://xxxxxx"; //内网服务
//var host="http://xxxx";//公网服务
var statusCheck="xxx";
var startSocket= "xxx" ;
var startWs= "xxx"  ;
var taskTimeout=  "xxx";
var inteval;
function start() {inteval = setInterval(checkStatus, 20000);
}
function end() {clearInterval(inteval);
}
start();
function checkStatus() {try {http.get(host + statusCheck, function (res) {res.on('data', function (data) {var socketStatus = JSON.parse(data.toString());if (socketStatus.socketServer == '挂了' || socketStatus.socketServer == 'Stopped') {console.log(moment(new Date()).format('YYYY-MM-DD HH:mm:ss') + "   socket服务不可用,正在重启")//重启服务
                    restartService();}})}).on('error', function (e) {console.log(moment(new Date()).format('YYYY-MM-DD HH:mm:ss') + "错误:" + e.message);});}catch (e) {console.log(e.message);}
}
function restartService() {//end();http.get(host + startSocket, function (res) {statusCode(res.statusCode, 'startSocket');console.log(moment(new Date()).format('YYYY-MM-DD HH:mm:ss') + "   重启socketserver" + res.statusCode);res.resume();});http.get(host + startWs, function (res) {statusCode(res.statusCode, 'startWs');console.log(moment(new Date()).format('YYYY-MM-DD HH:mm:ss') + "   重启wsserver" + res.statusCode);res.resume();});http.get(host + taskTimeout, function (res) {statusCode(res.statusCode, 'taskTimeout');console.log(moment(new Date()).format('YYYY-MM-DD HH:mm:ss') + "   重启任务状态监控" + res.statusCode);res.resume();});var status = { startSocket: false, startWs: false, taskTimeout: false };function statusCode(code, name) {if (code == 200) {status[name] = true;}if (status.startSocket && status.startWs && status.taskTimeout) {//start();
        }}
}

 

 

这种做法目前有两个弊端:

 

1.每次IIS进程回收的时候,socket服务都会有几秒钟的时间不可用

2.socket服务运行在web服务器内,不利于以后web服务器或者socket服务器的扩展,连接到A服务器的设备无法被B服务器访问

 

以后的改进方向是:

把socket服务器独立出来,重新设计Web服务器与socket服务器的通信方法。

这样可以使socket服务不会受到IIS服务器配置的影响,而且可以随意扩展web服务器与socket服务器。

转载于:https://www.cnblogs.com/tzyy/p/4348084.html

http://www.lbrq.cn/news/2741005.html

相关文章:

  • 厦门 微网站建设公司培训机构网站模板
  • 如何设计一个网站没灵感百度ai人工智能
  • 静态网站做淘宝客爱站工具包的模块有哪些
  • 全国工厂的网站建设seo软件优化
  • 怎么做网站上的销售代北京网站排名推广
  • 江苏建设部官方网站优化关键词的正确方法
  • 2012系统 做网站百度做网站
  • 福州外文网站建设分销渠道
  • 自建网站教程视频h5页面制作平台
  • wordpress链接域名seo是什么意思电商
  • 做公众号推送的网站广告投放平台系统
  • 峰峰信息港免费发布平台杭州seo排名收费
  • 网站数据流分析怎么做百度推广营销
  • 通过关键词优化提升企业网站百度入驻
  • h5微信网站建设开鲁网站seo转接
  • 稳定免费空间快速优化官网
  • 禹城网站建设郑州seo顾问阿亮
  • asp网站搭建教程手机金融界网站
  • 免费做app网站有哪些微信朋友圈广告推广代理
  • 模板网站有哪几类亚马逊关键词排名提升
  • 不懂见网站怎么办定制网站制作公司
  • 网站正在建设中亚洲深圳最新消息
  • 和优网站建网站建设域名注册人查询
  • wordpress 和dokuwiki河南智能seo快速排名软件
  • 微信网站制作合同举一个病毒营销的例子
  • 企业网站内容如何更新软文类型
  • 网站seo技术能不能赚钱免费下优化大师
  • 网站建设维护工作搜索关键词优化服务
  • 哔哩哔哩适合夫妻看的电视剧seo应该如何做
  • cms做门户网站朋友圈软文
  • Oracle数据库文件管理与空间问题解决指南
  • Linux系统top命令详细指南
  • 探秘gRPC——gRPC原理详解
  • 机器学习核心概念精要:从定义到评估
  • Flutter Provider 模式实现:基于 InheritedWidget 的状态管理实现
  • 10-verilog的EEPROM驱动-单字节读写