簡體   English   中英

Socket.IO 是否可擴展?

[英]Does Socket.IO scale?

我真的很喜歡 socket.io 的設計,我正計划使用它制作一個配對系統。 到目前為止,我所做的一切都奏效了。 但是,我擔心可擴展性,如果我開始擁有數千個大廳,並且有數千名玩家連接到它,會發生什么? 如何確保 socket.io 可以擴展到數百萬或至少數十萬的連接?

您可以使用UWebSocket.js獲得更好的性能和大規模程序

查看基准

但是你需要實現你的通信協議,比如 socket.io,你可以像這個例子一樣實現它(不要在生產中使用它,這只是一個玩具例子)

const Event = require('events')

class EventRouter extends Event {
    async process (msg) {
        this.emit(msg.event, msg.data)
    }
}


let router = new EventRouter()

// set up your connection and sockets

socket.on('message', router.process)

router.on('your route & your event ....', msg => {
    // your handler
})


function emit(socket, event, data) {
    socket.send({event, data})
}

並為您的客戶端重復此代碼

socket.io 是否縮放? 有點...

Socket.io 本身是關於解決管理 sockets 和后備的一些棘手問題。 它很棒,可以讓您啟動並運行。 然而,它並不是真正的 socket.io,您需要擔心規模。 它只管理 sockets。 最多它的可擴展性比原始的要小,但它永遠不是完整的解決方案。 您通常會先用完 CPU 或 TCP 連接。 這意味着您最終需要 go 廣泛,並且同時擁有多台機器做事。

要獲得數百萬個連接,您需要的不僅僅是 Socket.io。 最流行的答案是使用 redis 來處理分發,並使用 kubernetes 之類的東西來處理前端服務器的水平規模。

以我的經驗,很多人似乎在連接超過 30k 時遇到問題(我為 Ably.io 工作),但這是可行的......

管理所有這些位需要大量工作,除非它實際上是您擁有這項技術的核心,否則為什么不使用 AWS API 網關 websockets 或套接字/pubsub 的托管提供商?

暫無
暫無

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

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