SuperSocket.WebSocket.WebSocketServer.Setup無法啟動


新學一詞:達克效應。引出一句:“無知要比知識更容易產生自信。”—— 查爾斯·達爾文

寫在前面

在三亞呆了半個月了,三亞的冬天好熱啊,讓我回憶起了放暑假時下午百無聊賴的時光 { 一睡一下午٩(๑❛ᴗ❛๑)۶ }。

IMG_20180113_145418.jpg

算是從昨天晚上開始調試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這個引用進來就解決了。折騰了半天,其實還是文檔看少了。
SuperSocket.SocketEngine

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。

美圖

IMG_20180109_134012.jpg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM