新學一詞:達克效應。引出一句:“無知要比知識更容易產生自信。”—— 查爾斯·達爾文 寫在前面 在三亞呆了半個月了,三亞的冬天好熱啊,讓我回憶起了放暑假時下午百無聊賴的時光 { 一睡一下午٩(๑❛ᴗ❛๑)۶ }。 算是從昨天晚上開始調試WebSocket,代碼是16年初正常老代碼copy過來的,不過C ...
新學一詞:達克效應。引出一句:“無知要比知識更容易產生自信。”—— 查爾斯·達爾文
寫在前面
在三亞呆了半個月了,三亞的冬天好熱啊,讓我回憶起了放暑假時下午百無聊賴的時光 { 一睡一下午٩(๑❛ᴗ❛๑)۶ }。
算是從昨天晚上開始調試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。