tcpserver は D.J.Bernstein 氏作のサーバ制御ツールで ucspi-tcp というパッケージに入っています。UCSPI とは DJB 氏が提案している UNIX Client-Server Program Interface という TCP/IP のクライアント・サーバ通信ツールのインターフェースの仕様です。また、接続制御のために同氏作のデータベース cdb を用います。
今日は主に Windows でのビルド用ツールの修正や net/http のテストダミーサーバーの停止が JRuby でうまくいかない問題の対処などがありました。 [3cd809deb5] Nobuyoshi Nakada 2024-12-31 05:53:07 UTC Windows でのビルド時のツール win32/rm.bat で --debug オプションを追加して echo on としています。たぶん実行したコマンドを出力するように。また rd コマンドと del コマンドでワイルドカードの扱いに問題があったのを修正しています。 [89c9a9fd03] Charles Oliver…
失敗しているGitHub Actionsです。 https://github.com/ledsun/wands/actions/runs/12547524257/job/34985157639#step:4:48 次のようなエラーが起きています。 /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/3.4.0/uri/generic.rb:601:in 'URI::Generic#check_host': bad component(expected host component): ::1 (URI::InvalidComponentError) fro…
固有名詞の多いタイトルで失礼します。 力強くブログを108記事アウトプットする日 に参加中の灰原です。 forceoutput.github.io Devcontainer で Tilt の環境を作って Docker Compose で記述したサービスを立ち上げていきます。 なにをやるのか Devcontainer の準備 サンプルアプリの準備 Tiltfile の準備 サービスを動かす おわりに なにをやるのか Tilt (https://tilt.dev/)は、"A toolkit for fixing the pains of microservice development." と銘打…
RubyでWebSocketクライアントを書く その3 - @ledsun blog までの諸諸の調査をまとめます。 このライブラリの目的はdRubyのTCPトランスポートを置き換えるために、TCPSocket、TCPServerのインターフェースに近い形で、WebSocketを扱う事です。 require 'socket' require 'protocol/websocket/headers' require 'protocol/websocket/framer' require 'protocol/websocket/text_frame' require_relative 'upgra…
Rubyで echo サーバを作ろうと思い調べたところ、 TCPServer クラスがありました。 class TCPServer (Ruby 3.3 リファレンスマニュアル) リファレンスマニュアルには echo サーバの実装が記載されていました。 もう少し調べてみたところ、RubyKaigi 2009 の資料「ソケットライブラリの改善」がありました。 ソケットライブラリの改善 - 日本Ruby会議2009 この資料を読んだところ、TCPServer を使うよりは Socket.tcp_server_loop を使うほうが良さそうでした。 Socket.tcp_server_loop (Ru…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その5 - @ledsun blog で機能するようになりました。 リファクタリングします。 TCPServerっぽいインターフェースにします。 まずはWebSocketクラス。 確立されたWebSocketコネクションを表すクラスです。 require 'protocol/websocket/headers' require 'protocol/websocket/framer' require 'protocol/websocket/text_frame' class WebSocket …
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その4 - @ledsun blog で、HTTPリクエスト文字列、HTTPレスポンス文字列の処理をWEBrickで行うことにしました。 今回はWebSocketのFrameの読み書きをprotocol-websocketを使って行います。 require 'socket' require 'webrick' require 'protocol/websocket/headers' require 'protocol/websocket/framer' require 'protocol/we…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その3 - @ledsun blog ではWEBrickを使ってHTTPレスポンス文字列を作成しました。 今度は protocol-websocket を使ってHTTPレスポンス文字列を作成します。 require 'socket' require 'webrick' require 'protocol/websocket/headers' require 'protocol/http/headers' require 'protocol/http/response' def read_hea…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その2 - @ledsun blog でリクエスト文字列の解析をWEBrickに置き換えました。 今度はレスポンス文字列の作成にWEBrick::HTTPResponseを使います。 require 'socket' require 'webrick' require 'protocol/websocket/headers' def read_headers_from(socket) request = WEBrick::HTTPRequest.new(WEBrick::Config::HTT…
RubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れる その1 - @ledsun blog ではaccept_nonceの計算にprotocol-websocketを利用しました。 今度はヘッダの解析に使います。 Async::WebSocket gemの素振り その8 - @ledsun blogでは、HTTPリクエストのパースにRackを使いました。 今回はRackを使わずにWEBrickを使います。 require 'socket' require 'webrick' require 'protocol/websocket/headers'…
Async::WebSocket gemの素振り その8 - @ledsun blogにてRubyでつくるWebSocketサーバーにprotocol-websocket gemを取り入れると良さそうなことがわかりました。 やってみましょう。 require 'socket' require 'protocol/websocket/headers' server = TCPServer.new 'localhost', 2345 loop do # ここら辺はecho_server.rbと同じ。純粋なTCP通信 socket = server.accept # HTTPリクエストを読み込む h…
これは、なにをしたくて書いたもの? Pythonで、マルチスレッドに関する標準ライブラリーを知っておきたいなと思いまして。 ちなみにスレッド自体は過去にも扱っています。 Pythonのスレッドは、ネイティブスレッドなのか? - CLOVER🍀 PythonのTCPServer/HTTPServerをマルチスレッドで使う - CLOVER🍀 今回はロックやセマフォといったスレッド間に関する標準ライブラリーを見ていきます。 threadingライブラリー threadingライブラリーのページはこちら。 threading --- スレッドベースの並列処理 — Python 3.10.15 ドキュ…
RubyでEchoサーバー - @ledsun blog の経験を踏まえまして、改めて RubyでシンプルなWebSocketサーバーをゼロからつくってみたに取りくみます。 TCPサーバーの部分の理解が進みます。 HTTPで使ったTCPコネクションをそのままつかって、送受信データをWebSocketフレームに変えたことがわかります。 よしこれならできそう! require 'socket' require 'digest/sha1' server = TCPServer.new 'localhost', 2345 loop do # ここら辺はecho_server.rbと同じ。純粋なTCP通…
自分のWebSocketの理解が曖昧な気がしてきました。 RubyでシンプルなWebSocketサーバーをゼロからつくってみたを読みながら実装したら理解が深まるかと読み始めました。 するとTCPソケットの理解が怪しい気がしてきます。 そこでclass TCPServer (Ruby 3.3 リファレンスマニュアル)を参考にしてEchoサーバーを書いてみました。 require 'socket' class EchoServer def initialize @server = TCPServer.open(0) addr = @server.addr puts "Echo Server run…
Serverを再起動する Genieの開発環境を使っていて途中でREPLを立ち下げてしまうとサーバーが止まり、その後、フレームワークが使えなくなったりして再起動する必要がある。 そこで再起動方法を探したら、あった。 qiita.com プロジェクト名がWatchTonightとする。まずは環境をアクティブにして、プロジェクトをロード、起動の順で行う。 ((@v1.10) pkg> activate WatchTonight Activating project at `~/Julia/genie/WatchTonight` julia> using Genie julia> Genie.loa…