新学一词:达克效应。引出一句:“无知要比知识更容易产生自信。”—— 查尔斯·达尔文
写在前面
在三亚呆了半个月了,三亚的冬天好热啊,让我回忆起了放暑假时下午百无聊赖的时光 { 一睡一下午٩(๑❛ᴗ❛๑)۶ }。
算是从昨天晚上开始调试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。
美图