ืืืฉืืืื ืืืืจื ืืื ืืขืืชืื ืงืจืืืืช ืืืจืฉืื ื ืชืื ืื ืืืื ืืืช, ืืื ืืืืจื ืื ืืืช ืืืืืขืืช ืงืจืืคืื, ืชืืฆืืืช ืกืคืืจื, ืฆืณืืืื ืืงืืื ืื, ืืืฉืืจื IoT ืืืชืจืืืช. ืืงืฉืืช HTTP ืจืืืืืช ืืื ื ืืขืืืืช ืืืฉืืืืช ืืื: ืืืงืื ืืืื ืืฉืืื ืืงืฉืืช ืืืืจืืช ืืฉืจืช, ืืืจ ืืฆืืจื ืจืืื ืคืก ืืืืืื ืืื ืืืชื ื ืืขืืืื ืื.
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 ืื ืฉืืืื ืขื ืืกืืก ื ืชืื ืื.
ืืกืืจ ืืงืื
- [System.Net.WebSockets.ClientWebSocket] โ ืืืืงืช .NET ืืืืืืจ ื-WebSocket.
- ConnectAsync โ ืืงืืื ืืช ืืืืืืจ ืืฉืจืช.
- SendAsync โ ืฉืืืืช ืืช ืืืืขืช ืืืจืฉืื ืืฉืจืช.
- ReceiveAsync โ ืืงืืืช ืืช ืืืืืขืืช ืื ืื ืกืืช.
- ืืืืืจ ืืืืฉ ืืืืืืื โ ืืืืฉื ืืืืฆืขืืช ืืืืืช
while ($true)ืืื ืกืืคืืช ื-Start-Sleep. - ืจืืฉืื ืืืืขืืช โ ืืฆืื ืืช ืืืืืขืืช ืืงืื ืกืื ืืฆืืขืื ืฉืื ืื.
ืืืืฆืืช
- ืืฉืชืืฉ ืชืืื ืืืืืืจ ืืืืืื
wss://. - ืืื ืืช ืืคืชืืืช ื-API ืืืกืืืื ื ืืืืืืช ืฉืื.
- ืกื ื ืจืง ืืช ืื ืชืื ืื ืืืจืืฉืื ืื.
- ืขืืืจ ืืจืืื ืขื ื ืคื ืืืื, ืฉืืืจ ืืช ืืืืืขืืช ืืงืืืฅ ืื ืืืกืืก ื ืชืื ืื.
- ืืืืง ืืจืืฉ ืืช ืชืืืื ืืืืืืจ ืืืืฉ ืืืช ืืืคืื ืืฉืืืืืช.