Last active
August 28, 2019 22:08
-
-
Save elorest/5617b95feb79c67547124714f2106d5f to your computer and use it in GitHub Desktop.
Crystal Websocket Demo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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