SuperSocket.WebSocket.WebSocketServer.Setup无法启动
新学一词:达克效应。引出一句:“无知要比知识更容易产生自信。”—— 查尔斯·达尔文
写在前面
在三亚呆了半个月了,三亚的冬天好热啊,让我回忆起了放暑假时下午百无聊赖的时光 { 一睡一下午٩(๑❛ᴗ❛๑)۶ }。
算是从昨天晚上开始调试WebSocket,代码是16年初正常老代码copy过来的,不过C#新项目和以前老项目始终在我笔记本上跑不起了。
中间过程
SuperSocket.SocketEngine
新项目copy过来一开始就有问题,第三方引用是从NuGet重新添加的,SuperSocket.WebSocket 1.6.6.1 始终报错:SuperSocket.SocketEngine dll文件不存在;检查老项目packages里面却有这个文件,并且正常引用到项目里。好吧那就使用老项目的SuperSocket.WebSocket 1.6.6 这个版本,新项目里NuGet下载下来的却始终不带SuperSocket.SocketEngine,魔了!!
最后折腾了半天在官网上、还有NuGet介绍里面感觉到了SuperSocket.Engine被剥离出去了,NuGet里面搜索一下还真是有一个单独的包,把SuperSocket.Engine这个引用进来就解决了。折腾了半天,其实还是文档看少了。
WebSocketServer.Setup
2018.11.22早上起得早,昨天晚上把包引用的问题解决了后留下了WebSocketServer.Setup启动不了的问题,始终返回false,试着把ws、wss关掉一个,发现把wss去掉后能正常启动了,怀疑是证书的问题,后面折腾了一天证书的生成。
对于生成证书,以前是直接用Windows Server的证书服务比较简单,本地win7没有这个功能,就研究了一天用openssl生成本地测试用的ssl证书,还算结果比较理想,能在一张证书里面包含通配符和多域名,在IIS里面也能正常使用(有时间专门写篇文章)。
证书有了基本上把除了这个问题之外的很多问题都解决了,回到这个问题,用新证书测试结果还是一样,启动不了,这就尴尬了。。
当然我是不会放弃了啊,试了官网上的证书生成工具,还是一样。不过对于为什么不能启动,根本原因其实是一直不知道的,因为我这些代码WebSocket没有给任何提示或输出。。。好吧,研究一下他的日志吧。
为什么现在才想起日志?因为用xml进行配置我是拒绝的,有很多个项目要用到,不喜欢重复写几个基本一模一样的配置文件。so,所以配置都是代码实现的。又折腾了一番,把日志加上后就有WebSocket的输出信息了( ̄▽ ̄)/
[Service Error]WebSocket:Failed to allocate buffer for async socket communication,
may because there is no enough memory,
please decrease maxConnectionNumber in configuration!
引发类型为“System.OutOfMemoryException”的异常。
   在 SuperSocket.Common.BufferManager.InitBuffer()
   在 SuperSocket.SocketEngine.AsyncSocketServer.Start()
maxConnectionNumber 厉害了,看老代码:
using SuperSocket.SocketBase.Config;
...
public class WSConfig:IServerConfig
...
		public int MaxConnectionNumber
		{
			get { return 200000; }
		}
最大20万长连接,调成15万就正常能启动了,ws、wss都恢复正常。为什么以前好好的,现在就不行了呢,分析了一下可能跟硬件有莫大关系,当前笔记本4G内存,13年置办的,以前是台式电脑8G内存。。。设置大了还抛内存溢出,是作者手动抛出来的,什么?我猜的!
收尾
总结
- 多看别人家官网新动态哦;
 - 不开日志磨死人啊。
 
咸鱼
Q: 活的好好的为什么要用WebSocket?
A: 网页支持啊。
Q: 除了网页还有什么?
A: Android和IOS也支持啊,还有小程序。
Q: 你到底是在说什么?
A: 统一的数据收发通道,降低Web端、App端、小程序端的开发成本,在此基础上构建出的实时聊天应用,简单稳定高效。
Q: 没有什么毛病吗?
A: 有,老项目WebSocket代码并发随机引起的服务器崩溃问题还没有找到根源,偶尔一个月来一次,目前简单监控所在服务cpu占用情况来解决的,想着重写代码估计会解决哈。。
Q: 你C#是专业学的吗?
A: 不是哎,有没有人要学asp,class版的哦,绝对出神入化,学费4.5折。接触过java(servlet、Android)、python(诺基亚s40)。还是asp熟些,vbscript和javascript混合写的美滋滋,C#是16年开始接触的,和java语法太像,基本上不用入门了。
Q: 这篇文章是你发的技术类第几篇?
A: 第1篇,End。
美图
SuperSocket.WebSocket.WebSocketServer.Setup无法启动的更多相关文章
- Linux的setup命令启动服务名称和功能
		
Linux的setup命令启动服务名称和功能 1 anacron 可执行crontab既定时间内没执行的工作.2 atd 单一使用的例行性命令.3 apmd 了解系统电池电量(手提式计算机使用).4 ...
 - SuperSocket源码解析之启动过程
		
一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2.1 配置解析 从读取配置文件开始,直接拿到一个SocketServiceConfi ...
 - C#SuperSocket的搭建--通过配置启动
		
之前我们借助一个SuperSocket实现了一个简易版的服务器, 但是不管是Server还是Session都是使用框架的,本篇博客我们要实现自己的Server和Session,来重写框架原生的Serv ...
 - c#基于supersocket的简单websocket服务端收发消息实现
		
using log4net; using SuperSocket.SocketBase; using SuperSocket.WebSocket; using System; using System ...
 - C#  SuperSocket  消息推送
		
服务端使用Nuget引用SuperSocket.WebSocket和SuperSocket.Engine 服务器端代码[控制台] using SuperSocket.WebSocket; using ...
 - SuperSocket学习笔记(一)
		
这是根据我自己学习的经历整理出来的,如有不对之处,还请多多指教! SuperSocket源码下载 SuperSocket文档 安装并启动Telnet 学习方法: QuickStrart + 文档 参考 ...
 - 配置系统引导启动SuperScoekt
		
配置系统引导启动SuperScoekt SuperSocket源码解析之启动过程 一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2. ...
 - SuperSocket入门(二)- 探索AppServer、AppSession,Conmmand和App.config
		
在上一篇文章中,我们已经了解到了如何在SuperSocket处理客户端请求. 同时我们可能会发现一个问题,如果我们的服务器端包含有很多复杂的业务逻辑,这样的switch/case代码将会很 ...
 - SuperSocket入门(五)-常用协议实现模版及FixedSizeReceiveFilter示例
		
Socket里面的协议解析是Socket通讯程序设计中最复杂的地方,如果你的应用层协议设计或实现不佳,Socket通讯中常见的粘包,分包就难以避免.SuperSocket内置了命令行 ...
 
随机推荐
- HDFS hflush hsync和close的区别
			
HDFS的hflush,hsync和close有啥区别,分别做了什么 hflush: 语义是保证flush的数据被新的reader读到,但是不保证数据被datanode持久化. hsync: 与hfl ...
 - surging API
			
基于.NET CORE微服务框架 -谈谈surging API网关 基于.NET CORE微服务框架 -浅析如何使用surging surging 系列 NET Core 2.0 在WIN7系统 的H ...
 - ln -s 软连接介绍
			
软连接(softlink)也称符号链接.linux里的软连接文件就类似于windows系统中的快捷方式.软连接文件实际上是一个特殊的文件,文件类型是I.软连接文件实际上可以理解为一个文本文件,这个文件 ...
 - MySQL权限管理分配
			
之前一直忽视了MySQL的权限这一块的内容,以为一般般的知识点,随时用随时学就好了,导致自己这方面稍微有点不太明白的地方,总是踩坑,所以后来就总结一下: 1.MySQL权限系统的工作原理 .对连接的用 ...
 - 使用Index()+Match()函数实现更为灵活的VLookUp()
			
上一篇 http://www.cnblogs.com/-SANG/p/8407017.html 文章中已经介绍了vlookup的用法. 今天要使用index+match实现更为灵活的vlookup 先 ...
 - Mysql学习第三天
			
mysqldump -u root -p booksdb > C:/backup/booksdb_20180316.sql # 使用mysqldump命令备份数据库中的所有表 mysqldump ...
 - System.IO.Path文件路径类
			
Path类的静态属性和方法,此类操作不影响物料文件. 属性 char a = System.IO.Path.VolumeSeparatorChar;//: char b = System.IO.Pat ...
 - 团队作业——Alpha冲刺 6/12
			
团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:编辑界面完成标题栏的开发,以及与已经完成gallery开发的同学,商讨我负责的界面中,图片滑动的具体措施. 明日任务:除了图像识别内容嵌入 ...
 - 深入了解MyBatis二级缓存
			
深入了解MyBatis二级缓存 标签: mybatis二级缓存 2015-03-30 08:57 41446人阅读 评论(13) 收藏 举报 分类: Mybatis(51) 版权声明:版权归博主所 ...
 - 10行代码爬取全国所有A股/港股/新三板上市公司信息
			
摘要: 我们平常在浏览网页中会遇到一些表格型的数据信息,除了表格本身体现的内容以外,可能还想透过表格背后再挖掘些有意思或者有价值的信息.这时,可用python爬虫来实现.本文采用pandas库中的re ...