【#Laravel】laravel-echo&C#でプライベートチャネル通信が動かない!(いや,動かす方法を見つけた)
関連記事
- 【ChatGPT o4】祝日なのに仕事ーバテすぎー今夜こそ絶命だーモルモルモル 【2025年03月20日(木)】
- 【#CSharp】制御系が動き出したべ 【2025年02月20日(木)】
- 【#CSharp】ひっさしぶりにガッツリなC#案件をやっているぞー 【2025年02月19日(水)】
- 今週もひたすらモノ書き #JAVA 祭りがまだまだ続く そろそろC#を書かせろー 【2024年12月04日(水)】
- 【#apache #PHP】apacheが立ち上がらなくなったー「アクセス許可で禁じられた方法でソケットにアクセスしようとしました」エラー発生 【2024年04月16日(火)】
laravel-echoのブロードキャスト@WebSocket,ブラウザベースでは先日動いた
その内容はこちらに記載してありまする
⇒こちら
今度はクライアント側をC#に置き換えて実装チャレンジ
だってIcTセンサ群はローカルのWindowsPC配下に置かれるんじゃもん
WindowsPCにセンサデータを集約してそっから,REST-APIでサーバへぶん投げ
センサ制御はWebSocketでサーバから指示出す作戦
C#のフレームワークは「socket.io-client-csharp」フレームワークを使用
⇒こちらにあるぞい
参考にしたのがこのページ
How can I connect to Laravel broadcasting from c# desktop app?@stackoverflow
これ見て,パブリックチャネルの通信はサクッと出来た
さて,プライベートチャネルの通信(プライベートが無いと他所様が勝手に接続して電文を覗き見るべ)
こんな感じで実装した.プライベートチャネルは認証が要るんでjson文字列をauthキーに突っ込んでみた
private async void Socket_OnConnected(object sender, EventArgs e) { Console.WriteLine("Socket_OnConnected"); var socket = sender as SocketIO; string st = "{\"headers\":{\"Authorization\":\"Bearer hogehoge\",\"X-CSRF-TOKEN\":\""+ CsrfKey + "\"}}"; await socket.EmitAsync("subscribe", new { channel = "publicEventBMT", auth = st }); await socket.EmitAsync("subscribe", new { channel = "privateEventBMT.1", auth = st }); }動かない...ドロドロドロ
なして?
JAVA(jsではない)の実装を見つけたんでにらめっこしたら
プライベートチャネルのチャネル名称には,「private-」のプリフィックスが必要なことが判明
書き換えた
channel = "private-privateEventBMT.1",動かない...ドロドロドロ
なしてなして?
laravel-echo-serverの画面見たら...

「認証エラー」
はい?なして認証エラー何じゃ??
って通信ログ見たいけど,node.jsもlaravel-echo-serverもLaravelもろくなログは出してくれない
これは詰んだ感
何が起こってるのか把握できんべ
昨日はそのまま床についた...床の中で閃いた!
localhostのTCPパケットを横取りキャプチャして,TCP電文を解析すればいいんじゃね?
朝,TCPパケット解析アプリ「wireshark」登場

TCPパケットの解析とか20数年ぶりの予感...モルモルモル
さっそく動かしてTCPの生電文を採取
該当電文が居た!!(2741行目)

認証文字列を含む電文中に散見される「¥u0022」の文字...
な,なんだってぇ~~>ΩΩΩ Ω
認証文字列のダブルコーテーションを勝手にエスケープして送っているじゃねぇ~か!(大激怒!
文字列をエスケープさせない方法,イロイロ試したけどダメ
認証情報は文字列で送っちゃいけないって結論へ
なら,どうやって書けばいいの
悩むこと2時間...海外サイトで方法見っけ!こう書けばいいそうな
auth = new { headers = new { Authorization = "Bearer hogehoge", X_CSRF_TOKEN = CsrfKey } }X-CSRF-TOKENトークンに含まれてるハイフンは,そのまま書くとコンパイルエラーになるんで
アンダーバーに置き換えろって,さらにどっかの海外ページに書いてあった(汗
清書してみた(CsrfKeyはPublic変数 外部よりセットする)
private async void Socket_OnConnected(object sender, EventArgs e) { Console.WriteLine("Socket_OnConnected"); var socket = sender as SocketIO; await socket.EmitAsync("subscribe", new { channel = "publicEventBMT", auth = new //パブリックチャネルのauthは要らないはずやけど縁起物として書いておきますた { headers = new { Authorization = "Bearer hogehoge", X_CSRF_TOKEN = CsrfKey } } }); await socket.EmitAsync("subscribe", new { channel = "private-privateEventBMT.1", auth = new { headers = new { Authorization = "Bearer hogehoge", X_CSRF_TOKEN = CsrfKey } } }); }柏手打って,運転させてみた
キタ━━━━(゚∀゚)━━━━!!

プライベートチャネルも認証通って通信開始した!!
これで,完全にWebSocketの技術獲得したべ
IcTセンサにやりたい放題,イカガワシイ電文を投げつけられる!
あとから来られる方のために
事の顛末,記載しておきますわん.有効活用してくださいな
コメント
ご近所にココイチが出来る,らしい
【梅雨】朝から大雨ぇ~ さすが梅雨じゃ(25/5/17)
今日は城主生誕記念日で日本国は祝日,らしい...
兵庫 城崎温泉 旅館で火事 ほぼ消し止められる
東海道新幹線 停電のため運転見合わせ 区間が拡大 原因調査中
【霧島山】新燃岳:活発化してた火山性地震,ピタッと止まった(25/4/26)
今日は落雷,ひょうに厳重警戒じゃげな(25/4/14)
中日本高速道路 ETCシステム障害 7都県 一部の専用レーン閉鎖(25/4/6)
iPhone米価格は相互関税で30─40%上昇か、上位機種は2300ドルも