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内置了命令行 ...
随机推荐
- 【python】python之tuple元组
tuple特性 python的tuple与列表类似,不同之处在于tuple的元素不能修改. tuple使用小括号,列表使用方括号. tuple创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. ...
- 使用FireFox插件RESTClient、HttpRequester模拟http(get post)请求
我们写好一个接口后,需要进行测试.有时我们会写一个html表单提交,无疑增加了工作量,尤其是当参数比较多或者传json或xml数据时,效率更是大大降低.我们可以使用基于FireFox的RESTClie ...
- 使用SQL Server Management Studio操作replication时,要用机器名登录,不要用IP地址
如果你在使用SSMS(SQL Server Management Studio)登录SQL Server时,使用的是IP地址,如下图所示: 当你操作replication时,会报错: 从上面的错误提示 ...
- 使用postman给servlet传各种参数
web开发中经常会使用到postman软件,常用的方法涉及到get和post方法去获取对应json数据,get方法直接传url就可以,返回对应json数据.但是post请求就需要json数据提交,而且 ...
- sql server复制表数据到另外一个表 的存储过程
) Drop Procedure GenerateData go CREATE PROCEDURE GenerateData @tablename sysname AS begin ) ) ) dec ...
- Android5.0中Material Design的新特性
最近项目中需要用到Material Design,整理了下面几个常用的控件,以便记忆. 一.Snackbar 1.作用:与Toast类似,但是可以点击监听: 2.使用: (1)Snackbar调用静态 ...
- 【转】Java学习---volatile 关键字
[原文]https://www.toutiao.com/i6591422029323305480/ 前言 不管是在面试还是实际开发中 volatile 都是一个应该掌握的技能. 首先来看看为什么会出现 ...
- 第 15 章 位操作(binbit)
/*------------------------------------ binbit.c -- 使用位操作显示二进制 ------------------------------------*/ ...
- 将jar包添加到maven仓库
Maven资源库配置 访问http://mvnrepository.com/,在搜索栏中输入你要搜索的 JAR 包的关键字 例如下载ImpalaJDBC41这个jar包 选择你想要下载的Jar包版 ...
- Nowcoder 提高组练习赛-R3
https://www.nowcoder.com/acm/contest/174#question 今天的题好难呀,只有94个人有分.然后我就爆零光荣 考到一半发现我们班要上物理课,还要去做物理实验( ...