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

写在前面

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

算是从昨天晚上开始调试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. HDFS hflush hsync和close的区别

    HDFS的hflush,hsync和close有啥区别,分别做了什么 hflush: 语义是保证flush的数据被新的reader读到,但是不保证数据被datanode持久化. hsync: 与hfl ...

  2. surging API

    基于.NET CORE微服务框架 -谈谈surging API网关 基于.NET CORE微服务框架 -浅析如何使用surging surging 系列 NET Core 2.0 在WIN7系统 的H ...

  3. ln -s 软连接介绍

    软连接(softlink)也称符号链接.linux里的软连接文件就类似于windows系统中的快捷方式.软连接文件实际上是一个特殊的文件,文件类型是I.软连接文件实际上可以理解为一个文本文件,这个文件 ...

  4. MySQL权限管理分配

    之前一直忽视了MySQL的权限这一块的内容,以为一般般的知识点,随时用随时学就好了,导致自己这方面稍微有点不太明白的地方,总是踩坑,所以后来就总结一下: 1.MySQL权限系统的工作原理 .对连接的用 ...

  5. 使用Index()+Match()函数实现更为灵活的VLookUp()

    上一篇 http://www.cnblogs.com/-SANG/p/8407017.html 文章中已经介绍了vlookup的用法. 今天要使用index+match实现更为灵活的vlookup 先 ...

  6. Mysql学习第三天

    mysqldump -u root -p booksdb > C:/backup/booksdb_20180316.sql # 使用mysqldump命令备份数据库中的所有表 mysqldump ...

  7. System.IO.Path文件路径类

    Path类的静态属性和方法,此类操作不影响物料文件. 属性 char a = System.IO.Path.VolumeSeparatorChar;//: char b = System.IO.Pat ...

  8. 团队作业——Alpha冲刺 6/12

    团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:编辑界面完成标题栏的开发,以及与已经完成gallery开发的同学,商讨我负责的界面中,图片滑动的具体措施. 明日任务:除了图像识别内容嵌入 ...

  9. 深入了解MyBatis二级缓存

    深入了解MyBatis二级缓存 标签: mybatis二级缓存 2015-03-30 08:57 41446人阅读 评论(13) 收藏 举报  分类: Mybatis(51)  版权声明:版权归博主所 ...

  10. 10行代码爬取全国所有A股/港股/新三板上市公司信息

    摘要: 我们平常在浏览网页中会遇到一些表格型的数据信息,除了表格本身体现的内容以外,可能还想透过表格背后再挖掘些有意思或者有价值的信息.这时,可用python爬虫来实现.本文采用pandas库中的re ...