新学一词:达克效应。引出一句:“无知要比知识更容易产生自信。”—— 查尔斯·达尔文

写在前面

在三亚呆了半个月了,三亚的冬天好热啊,让我回忆起了放暑假时下午百无聊赖的时光 { 一睡一下午٩(๑❛ᴗ❛๑)۶ }。

算是从昨天晚上开始调试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内存。。。设置大了还抛内存溢出,是作者手动抛出来的,什么?我猜的!

收尾

总结

  1. 多看别人家官网新动态哦;
  2. 不开日志磨死人啊。

咸鱼

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无法启动的更多相关文章

  1. Linux的setup命令启动服务名称和功能

    Linux的setup命令启动服务名称和功能 1 anacron 可执行crontab既定时间内没执行的工作.2 atd 单一使用的例行性命令.3 apmd 了解系统电池电量(手提式计算机使用).4 ...

  2. SuperSocket源码解析之启动过程

    一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2.1 配置解析 从读取配置文件开始,直接拿到一个SocketServiceConfi ...

  3. C#SuperSocket的搭建--通过配置启动

    之前我们借助一个SuperSocket实现了一个简易版的服务器, 但是不管是Server还是Session都是使用框架的,本篇博客我们要实现自己的Server和Session,来重写框架原生的Serv ...

  4. c#基于supersocket的简单websocket服务端收发消息实现

    using log4net; using SuperSocket.SocketBase; using SuperSocket.WebSocket; using System; using System ...

  5. C# SuperSocket 消息推送

    服务端使用Nuget引用SuperSocket.WebSocket和SuperSocket.Engine 服务器端代码[控制台] using SuperSocket.WebSocket; using ...

  6. SuperSocket学习笔记(一)

    这是根据我自己学习的经历整理出来的,如有不对之处,还请多多指教! SuperSocket源码下载 SuperSocket文档 安装并启动Telnet 学习方法: QuickStrart + 文档 参考 ...

  7. 配置系统引导启动SuperScoekt

    配置系统引导启动SuperScoekt SuperSocket源码解析之启动过程 一 简介 这里主要说明从配置系统引导启动SuperScoekt作为应用程序,且以控制台程序方式启动 二 启动过程 2. ...

  8. SuperSocket入门(二)- 探索AppServer、AppSession,Conmmand和App.config

          在上一篇文章中,我们已经了解到了如何在SuperSocket处理客户端请求. 同时我们可能会发现一个问题,如果我们的服务器端包含有很多复杂的业务逻辑,这样的switch/case代码将会很 ...

  9. SuperSocket入门(五)-常用协议实现模版及FixedSizeReceiveFilter示例

             Socket里面的协议解析是Socket通讯程序设计中最复杂的地方,如果你的应用层协议设计或实现不佳,Socket通讯中常见的粘包,分包就难以避免.SuperSocket内置了命令行 ...

随机推荐

  1. 关于SQLSERVER走起公众帐号推送视频的通知

    关于SQLSERVER走起公众帐号推送视频的通知 为了SQLSERVER走起这个微博帐号和微信帐号更加多样化,内容更加丰富 也为了发挥微信.微博的媒介传播威力,在以后的微博.微信每日推送中会在适当的时 ...

  2. 大话存储 1 - 走进计算机IO世界

    组成计算机的三大件:CPU,内存和IO. 1 总线 总线就是一条或者多条物理上的导线,每个部件都接到这些导线上,同一时刻只能有一个部件在接收或者发送. 仲裁总线:所有部件按照另一条总线,也就是仲裁总线 ...

  3. DFS服务待书写

    https://www.cnblogs.com/xfan1982/p/4120583.html 安装AD域控制 https://www.cnblogs.com/wanggege/p/4605678.h ...

  4. [A] 1046 Shortest Distance

    The task is really simple: given N exits on a highway which forms a simple cycle, you are supposed t ...

  5. SDN2017 第二次实验作业

    安装floodlight 参考链接:http://www.sdnlab.com/19189.html 从github下载源码,并编译安装 $ sudo apt-get install build-es ...

  6. JAVA随机数之多种方法从给定范围内随机N个不重复数

    一.JAVA中生成随机数的方式 1.在j2se中使用Math.random()令系统随机选取一个0~1之间的double类型小数,将其乘以一个数,比如25,就能得到一个0~25范围内的随机数,这个在j ...

  7. Sublime2 DocBlocker插件在自动补全注释时输出自定义作者和当前时间等信息

    Sublime在进行前端开发时非常棒,当然也少不了众多的插件支持,DocBlocker是在Sublime平台上开发一款自动补全代码插件,支持JavaScript (including ES6), PH ...

  8. canvas实例_时钟

    效果图:是一个会动的时钟 一.时钟的组成 1.表盘(蓝色)  2.刻度(黑色)  3.时针(黑色)  4.分针(黑色)  5.秒针(红色)需美化     二.主要应用的技术 Canvas画线 Canv ...

  9. VS2013自带报表+打印功能

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010773667/article/details/27540389 经过了VB版机房收费系统的学习 ...

  10. Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换(转载)

    第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换 1.函数介绍在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两 ...