Skip to content

Instantly share code, notes, and snippets.

@elorest
Last active August 28, 2019 22:08
Show Gist options
  • Save elorest/5617b95feb79c67547124714f2106d5f to your computer and use it in GitHub Desktop.
Save elorest/5617b95feb79c67547124714f2106d5f to your computer and use it in GitHub Desktop.
Crystal Websocket Demo
require "http"
ws = HTTP::WebSocket.new("127.0.0.1", "/ping", 3000)
# react to received messages
ws.on_message do |msg|
puts "recieved message: #{msg}."
end
# spawn a fiber that will forward messages from a channel
spawn do
loop do
sleep 1
ws.send Time.now.to_s
end
end
# start infinite loop
ws.run
require "http/server"
SOCKETS = [] of HTTP::WebSocket
ws_handler = HTTP::WebSocketHandler.new do |socket|
puts "Socket opened"
SOCKETS << socket
socket.on_message do |message|
puts "Received Message: #{message}."
SOCKETS.each { |socket| socket.send "Echo back from server: #{message}" }
end
socket.on_close do
SOCKETS.delete(socket)
puts "Socket closed"
end
end
server = HTTP::Server.new([ws_handler])
address = server.bind_tcp "0.0.0.0", 3000
puts "Listening on ws://#{address}"
server.listen
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment