Skip to content
> ๐Ÿ’ป ๐Ÿง  ืงื•ื“ 1001 > โšก ื”ืคื™ืœื•ืกื•ืคื™ื” ืฉืœ PowerShell > > ๐Ÿ“ก ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘-WebSocket ืœืงื‘ืœืช ื ืชื•ื ื™ื ื‘ื–ืžืŸ ืืžืช ื‘ืืžืฆืขื•ืช PowerShell

๐Ÿ“ก ื›ื™ืฆื“ ืœื”ืฉืชืžืฉ ื‘-WebSocket ืœืงื‘ืœืช ื ืชื•ื ื™ื ื‘ื–ืžืŸ ืืžืช ื‘ืืžืฆืขื•ืช PowerShell

WebSocket ืคื•ืชืจืช ื‘ืขื™ื” ื–ื•: ื–ื”ื• ืคืจื•ื˜ื•ืงื•ืœ ื”ืžืืคืฉืจ ื—ื™ื‘ื•ืจ ืžืชืžืฉืš ื•ื“ื•-ื›ื™ื•ื•ื ื™ ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช. ื”ืฉืจืช ื™ื›ื•ืœ ืœื“ื—ื•ืฃ ื ืชื•ื ื™ื ื—ื“ืฉื™ื ืœืœืงื•ื—, ื•ื”ืœืงื•ื— ื™ื›ื•ืœ ืœืฉืœื•ื— ืคืงื•ื“ื•ืช ืื• ืœื”ื™ืจืฉื ืœืขืจื•ืฆื™ื ืกืคืฆื™ืคื™ื™ื.

ืื ืœื•ื’ื™ื” ืคืฉื•ื˜ื”: ืืชื ืžืชืงืฉืจื™ื ืœื—ื‘ืจ (handshake), ื”ื—ื‘ืจ ื‘ื•ื“ืง ืžื™ ืžืชืงืฉืจ ื•ืžืงื‘ืœ ืืช ื”ืฉื™ื—ื” (ืื™ืžื•ืช), ื•ื”ืงื• ื ืฉืืจ ืคืชื•ื—, ื•ืžืืคืฉืจ ื”ื—ืœืคืช ื”ื•ื“ืขื•ืช (ื–ืจื™ืžืช ื ืชื•ื ื™ื).

ื™ืชืจื•ื ื•ืช ื”ืฉื™ืžื•ืฉ ื‘-WebSocket ื›ื•ืœืœื™ื ื—ื™ื‘ื•ืจ ืžืชืžืฉืš ืœืœื ื‘ืงืฉื•ืช ื—ื•ื–ืจื•ืช, ืงื‘ืœืช ื ืชื•ื ื™ื ื›ืžืขื˜ ืžื™ื“ื™ืช, ื™ืขื™ืœื•ืช ื‘ืžืฉืื‘ื™ื ื•ืชืงืฉื•ืจืช ื“ื•-ื›ื™ื•ื•ื ื™ืช.


ื—ื™ื‘ื•ืจ ืœ-WebSocket: ื“ื•ื’ืžื” ืขื Cryptocompare

Cryptocompare ืžืกืคืงืช ื ืชื•ื ื™ ืžื˜ื‘ืขื•ืช ืงืจื™ืคื˜ื• ื‘ื–ืžืŸ ืืžืช ื“ืจืš WebSocket. ืœื“ื•ื’ืžื”, ื ื™ืชืŸ ืœื”ื™ืจืฉื ืœื–ืจื BTC/USD.

ืœื”ืœืŸ ืœืงื•ื— WebSocket ืื•ื ื™ื‘ืจืกืœื™ ื‘-PowerShell

# =================================================================================
# WebSocket-Client.ps1 โ€” ืœืงื•ื— WebSocket ืื•ื ื™ื‘ืจืกืœื™ ืœื ืชื•ื ื™ื ื‘ื–ืžืŸ ืืžืช
# Windows PowerShell >= 5.1
# ืžื—ื‘ืจ: hypo69
# ื ื•ืฆืจ: 13/09/2025
# =================================================================================

# =================================================================================
# ืจื™ืฉื™ื•ืŸ (MIT)
# =================================================================================
<#
ืจื™ืฉื™ื•ืŸ MIT: https://opensource.org/licenses/MIT
#>

function Start-WebSocketClient {
<#
.SYNOPSIS
    ืœืงื•ื— WebSocket ืื•ื ื™ื‘ืจืกืœื™ ืขื ืชืžื™ื›ื” ื‘ื—ื™ื‘ื•ืจ ืžื—ื“ืฉ ื•ืจื™ืฉื•ื ื”ื•ื“ืขื•ืช.

.DESCRIPTION
    ืžืชื—ื‘ืจ ืœืฉืจืช WebSocket, ืฉื•ืœื— ื”ื•ื“ืขืช ื”ืจืฉืžื” ื•ืžืฆื™ื’ ื”ื•ื“ืขื•ืช ื ื›ื ืกื•ืช ื‘ืงื•ื ืกื•ืœ.
    ืžืชื‘ืฆืข ื—ื™ื‘ื•ืจ ืžื—ื“ืฉ ืื•ื˜ื•ืžื˜ื™ ื‘ืžืงืจื” ืฉืœ ื ื™ืชื•ืง.

.PARAMETER Url
    ื›ืชื•ื‘ืช ื”ืฉืจืช WebSocket (ืœืžืฉืœ: "wss://streamer.cryptocompare.com/v2?api_key=YOUR_API_KEY").

.PARAMETER SubscribeMessage
    ื”ื•ื“ืขืช ื”ืจืฉืžื” ื‘ืคื•ืจืžื˜ JSON ืœืฉืœื™ื—ื” ืœืฉืจืช.

.PARAMETER ReconnectDelay
    ื–ืžืŸ ื”ืžืชื ื” ื‘ืฉื ื™ื•ืช ืœืคื ื™ ื—ื™ื‘ื•ืจ ืžื—ื“ืฉ. ื‘ืจื™ืจืช ืžื—ื“ืœ: 5 ืฉื ื™ื•ืช.

.EXAMPLE
    $Url = "wss://streamer.cryptocompare.com/v2?api_key=YOUR_API_KEY"
    $SubscribeMessage = '{"action":"SubAdd","subs":["5~CCCAGG~BTC~USD"]}'
    Start-WebSocketClient -Url $Url -SubscribeMessage $SubscribeMessage -ReconnectDelay 5
#>
    [CmdletBinding()]
    param(
        [Parameter(Mandatory, HelpMessage = "ืฆื™ื™ืŸ ืืช ื›ืชื•ื‘ืช ื”ืฉืจืช WebSocket.")]
        [string]$Url,

        [Parameter(Mandatory, HelpMessage = "ื”ื•ื“ืขืช ื”ืจืฉืžื” ื‘ืคื•ืจืžื˜ JSON.")]
        [string]$SubscribeMessage,

        [Parameter(Mandatory = $false, HelpMessage = "ื–ืžืŸ ื”ืžืชื ื” ืœื—ื™ื‘ื•ืจ ืžื—ื“ืฉ ื‘ืฉื ื™ื•ืช.")]
        [int]$ReconnectDelay = 5
    )

    while ($true) {
        try {
            $ws = [System.Net.WebSockets.ClientWebSocket]::new()
            $uri = [Uri] $Url
            $ws.ConnectAsync($uri, [Threading.CancellationToken]::None).Wait()
            Write-Host "โœ… ืžื—ื•ื‘ืจ ืœ-$Url" -ForegroundColor Green

            if ($SubscribeMessage) {
                $bytes = [System.Text.Encoding]::UTF8.GetBytes($SubscribeMessage)
                $buffer = [System.ArraySegment[byte]]::new($bytes)
                $ws.SendAsync($buffer, [System.Net.WebSockets.WebSocketMessageType]::Text, $true, [Threading.CancellationToken]::None).Wait()
                Write-Host "โžก ื”ื•ื“ืขืช ื”ืจืฉืžื” ื ืฉืœื—ื”: $SubscribeMessage" -ForegroundColor Cyan
            }

            $bufferSize = 1024
            $buffer = New-Object byte[] $bufferSize
            $segment = [System.ArraySegment[byte]]::new($buffer)

            while ($ws.State -eq [System.Net.WebSockets.WebSocketState]::Open) {
                $receiveTask = $ws.ReceiveAsync($segment, [Threading.CancellationToken]::None)
                $receiveTask.Wait()
                $message = [System.Text.Encoding]::UTF8.GetString($buffer, 0, $receiveTask.Result.Count)
                Write-Host "๐Ÿ“ฉ ื”ืชืงื‘ืœ: $message"
            }
        }
        catch {
            Write-Host "โš  ืฉื’ื™ืื”: $_" -ForegroundColor Red
        }

        Write-Host "โณ ื”ืชื—ื‘ืจื•ืช ืžื—ื“ืฉ ื‘ืขื•ื“ $ReconnectDelay ืฉื ื™ื•ืช..." -ForegroundColor Yellow
        Start-Sleep -Seconds $ReconnectDelay
    }
}

# =================================================================================
# --- ื“ื•ื’ืžืช ืฉื™ืžื•ืฉ ---
# =================================================================================
# ื”ืกืจ ืืช ื”ื”ืขืจื” ื•ื”ื—ืœืฃ ืืช YOUR_API_KEY ื‘ืžืคืชื— ื”-API ืฉืœืš ืž-Cryptocompare
# $Url = "wss://streamer.cryptocompare.com/v2?api_key=YOUR_API_KEY"
# $SubscribeMessage = '{"action":"SubAdd","subs":["5~CCCAGG~BTC~USD"]}'
# Start-WebSocketClient -Url $Url -SubscribeMessage $SubscribeMessage -ReconnectDelay 5

ื’ื™ืฉื” ื–ื• ืžืฆื™ืขื” ืžืกืคืจ ื™ืชืจื•ื ื•ืช. ื”ื™ื ืื•ื ื™ื‘ืจืกืœื™ืช ื•ืขื•ื‘ื“ืช ืขื ื›ืœ ื–ืจื WebSocket, ืœื ืžื•ื’ื‘ืœืช ืœืฉื™ืจื•ืช ืื—ื“ ื‘ืœื‘ื“. ื—ื™ื‘ื•ืจ ืžื—ื“ืฉ ืื•ื˜ื•ืžื˜ื™ ืžื‘ื˜ื™ื— ืฉื”ืœืงื•ื— ื™ืฉื—ื–ืจ ืืช ื”ื—ื™ื‘ื•ืจ ืื ื”ื•ื ืžื ื•ืชืง. ื”ืกืงืจื™ืคื˜ ืงืœ ืœื”ืชืืžื” ืœืขืจื•ืฆื™ื ืื• ืกื•ื’ื™ ื ืชื•ื ื™ื ืฉื•ื ื™ื ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ืฉื™ื ื•ื™ ื”ื•ื“ืขืช ื”ื”ืจืฉืžื”. ื‘ื ื•ืกืฃ, ื ื™ืชืŸ ืœื”ืจื—ื™ื‘ ืื•ืชื• โ€“ ืจื™ืฉื•ื ืœืงื•ื‘ืฅ, ืกื™ื ื•ืŸ ื”ื•ื“ืขื•ืช ื ื›ื ืกื•ืช, ืขื™ื‘ื•ื“ JSON ืื• ืฉื™ืœื•ื‘ ืขื ื‘ืกื™ืก ื ืชื•ื ื™ื.


ื”ืกื‘ืจ ื”ืงื•ื“

  1. [System.Net.WebSockets.ClientWebSocket] โ€” ืžื—ืœืงืช .NET ืœื—ื™ื‘ื•ืจ ืœ-WebSocket.
  2. ConnectAsync โ€” ืžืงื™ืžื” ืืช ื”ื—ื™ื‘ื•ืจ ืœืฉืจืช.
  3. SendAsync โ€” ืฉื•ืœื—ืช ืืช ื”ื•ื“ืขืช ื”ื”ืจืฉืžื” ืœืฉืจืช.
  4. ReceiveAsync โ€” ืžืงื‘ืœืช ืืช ื”ื”ื•ื“ืขื•ืช ื”ื ื›ื ืกื•ืช.
  5. ื—ื™ื‘ื•ืจ ืžื—ื“ืฉ ืื•ื˜ื•ืžื˜ื™ โ€” ืžื™ื•ืฉื ื‘ืืžืฆืขื•ืช ืœื•ืœืืช while ($true) ืื™ื ืกื•ืคื™ืช ื•-Start-Sleep.
  6. ืจื™ืฉื•ื ื”ื•ื“ืขื•ืช โ€” ืžืฆื™ื’ ืืช ื”ื”ื•ื“ืขื•ืช ื‘ืงื•ื ืกื•ืœ ื‘ืฆื‘ืขื™ื ืฉื•ื ื™ื.

ื”ืžืœืฆื•ืช

  1. ื”ืฉืชืžืฉ ืชืžื™ื“ ื‘ื—ื™ื‘ื•ืจ ืžืื•ื‘ื˜ื— wss://.
  2. ื•ื“ื ืืช ืžืคืชื—ื•ืช ื”-API ื•ืืกื™ืžื•ื ื™ ื”ืื™ืžื•ืช ืฉืœืš.
  3. ืกื ืŸ ืจืง ืืช ื”ื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื ืœืš.
  4. ืขื‘ื•ืจ ื–ืจืžื™ื ืขื ื ืคื— ื’ื‘ื•ื”, ืฉืžื•ืจ ืืช ื”ื”ื•ื“ืขื•ืช ื‘ืงื•ื‘ืฅ ืื• ื‘ื‘ืกื™ืก ื ืชื•ื ื™ื.
  5. ื‘ื“ื•ืง ืžืจืืฉ ืืช ืชื”ืœื™ืš ื”ื—ื™ื‘ื•ืจ ืžื—ื“ืฉ ื•ืืช ื˜ื™ืคื•ืœ ื”ืฉื’ื™ืื•ืช.

ื›ืชื™ื‘ืช ืชื’ื•ื‘ื”

ื”ืื™ืžื™ื™ืœ ืœื ื™ื•ืฆื’ ื‘ืืชืจ. ืฉื“ื•ืช ื”ื—ื•ื‘ื” ืžืกื•ืžื ื™ื *