簡體   English   中英

Socket.IO在Node.js中扮演什么角色

[英]What role does Socket.IO have with Node.js

我對JS及其豐富的庫世界還很陌生。 我正在尋找一個涉及客戶端與服務器之間的網絡通信(套接字)的項目。 在一個擁有大量圖書館的世界中,我無法決定使用哪個圖書館。 我正在尋找可以帶來效率和穩定性的東西。

有人告訴我,Node.js就像是您(作為開發人員)和Socket.IO之間的中間人。 有人告訴我這是一個巨大的框架,您可能至少不會使用其中的一半。 有人告訴我,要最大限度地提高效率,最好使用Socket.IO來實現自己的功能。 我自己進行了一些研究,發現Socket.IO需要Node.js和Node.js不需要Socket.IO。 這與我被告知的完全相反。 然后,我發現大多數開發人員同時使用Socket.IO和Node.js?

就像我說的那樣,我還很新,但是我找不到合適的資源來幫助我以最大的效率完成客戶端和服務器之間的Websocket通信,或者至少解釋了Socket.IO和Node.js之間的區別。 如果有人在這里,請告訴我! 我將不勝感激。

node.js是基於javascript的通用運行時環境(與范圍內的python等其他語言運行時類似)。 您可以在其中創建甚至不使用網絡的應用程序。 它通常用作創建的Web應用程序的Web服務器,並具有大量的工具和豐富的附件庫。 它不需要socket.io。

socket.io是一個特定的庫,用於啟用客戶端和服務器之間的類似於網絡套接字的通信(例如,聊天室應用程序就是典型示例)。 socket.io的服務器端假定使用JavaScript運行時(因為它是用JavaScript編寫的),因此通常表示node.js(盡管我不確定是否可以替換其他JS運行時)。

您可以將node.js平台,將socket.io特定工具,以執行在該平台上運行的特定工作。 如果需要客戶端和服務器之間的Web套接字連接,則可以使用socket.io (位於node.js之上)。

你會只使用node.js ,如果您需要任何其他的事情節點的擅長,但並不需要的WebSocket連接。


websockets本身可以在服務器端進行編程,而無需使用socket.io和node.js。 它們可以用海峽C ++或Java編程。 但是socket.io (在節點中運行)提供了一種非常簡單的設置方式,因為socket.io庫在一個庫和一個API中涵蓋了客戶端和服務器,並且都使用相同的語言(javascript)。 看一下socket.io網站上的聊天室應用程序示例,您將不太可能找到任何其他解決方案,只要它使用的代碼行少,並且在客戶端和服務器上具有相同的接口,就可以完成此任務。

如果僅設置一個websocket服務器(沒有任何Web服務器或任何類型的Web應用程序),則仍可以使用node和socket.io並將其僅用於websocket服務器,這樣仍然會非常有效。 盡管節點能夠執行許多其他操作,但是如果您不配置和安裝所有其他這些功能,那么它們並不會花費您任何費用-它們只是未使用的功能而無法運行。

我應該補充一點,socket.io庫要做的另一件事是,它處理客戶端和服務器之間的自動協商,以找到客戶端和服務器進行通信的最佳通道。 如果Websockets可用,那么socket.io可能會使用它們,但是如果Web sockets不可用,則socket.io具有可以使用的替代方法(即使在較舊的瀏覽器中)。 該功能是在socket.io中免費提供的,甚至無需您進行任何操作。


如果您還不清楚,Websocket通常用於提供客戶端和服務器之間的實時通信。 盡管客戶端可以隨時通過ajax調用或網頁請求從服務器請求數據,但是websockets允許的是客戶端與服務器之間的兩種實時通信方式,並且websockets的最大優點是服務器可以發送客戶端連接時隨時獲取實時數據。

例如,我有一個網頁,只要該網頁打開,它就可以從服務器接收實時數據。 該網頁是通過典型的node.js Web服務器安裝來提供的,但是實時數據是通過Websocket連接從服務器發送到客戶端的。

另外,如果客戶端和服務器之間發生了閑聊,則Websocket可能比一系列ajax調用效率更高,因為使用websocket時,一次打開連接並重復使用,而使用ajax時,每個連續的ajax調用就像新的連接。

Node.js是一個運行時環境。 這是一個具有基於異步I / O構建的標准庫的JavaScript引擎。 它與Java,Python,Ruby,.NET等在許多其他Web應用程序中所起的作用相同。

有人告訴我這是一個巨大的框架,您可能至少不會使用其中的一半。

可能大多數人從來沒有使用過大多數標准庫,但是我認為Node.js不會比其他運行時更適用。 “框架”不是描述它的准確詞。

有人告訴我,要最大限度地提高效率,最好使用Socket.IO來實現自己的功能。

誰告訴你這是錯誤的,或者是要最大化效率,那么最好使用[Node.js和] Socket.IO [代替其他解決方案]。 許多其他非Node.js解決方案每個連接都需要一個線程或進程,這限制了服務器可以處理的同時連接數。 Node.js是圍繞異步I / O構建的,異步I / O可以更好地保持多個連接一次打開,而Socket.IO是Node.js的庫,用於使用WebSockets。

TL; DR:Socket.IO可以在客戶端和服務器之間實時觸發事件,因此您無需重新加載頁面即可注意到某些變化。 它可以用於“實時”應用程序,例如協作繪圖,實時聊天,在線游戲等等!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM