socket.io 出現的WebSocket is closed before the connection is established


 

WebSocket is closed before the connection is established

最近socket.io是挺流行的,幼麟棋牌和一些好的開源項目也使用這個框架,在搭建其平台示例的出現這個錯誤,網上找了半天竟然沒有找到解決辦法,開始以為是版本socket.io版本問題,換了2.0一樣,用telnet連接端口正常,但是客戶端怎么都連接不上。
逐步進行分析,發現socket.io是非堵塞設計,竟然不判斷端口已經打開,而且也沒有輸出對應log。這個和平時編程完全不同 。 因此,大家要注意了,不管你用listen還是初始化構造那里,你的端口被占用了,也不會導致異常,因此開發代碼一定要做檢測端口。
socket.io 打開的代碼
Socket.prototype.open =
Socket.prototype.connect = function () {
  if (this.connected) return this;

  this.subEvents();
  this.io.open(); // ensure open
  if ('open' === this.io.readyState) this.onopen();
  this.emit('connecting');
  return this;
};
不是自己打開端口是這樣readyState='opening',但是代碼里面沒處理,依然有返回。
幼麟棋牌用的是10000端口號,大家都覺得10000端口號,誰會去占用,開始一直沒往這方面想,但是迅雷的服務ThunderPlatform.exe是占用10000端口的,呵呵,問題出來了,把ThunderPlatform.exe進程結束掉重啟我們的程序就一切OK。

基本可以確定目前在socket.io編程一定要先判斷端口,切記!
 

 


免責聲明!

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



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