【#Laravel】laravel-echo&C#でプライベートチャネル通信が動かない!(いや,動かす方法を見つけた)
関連記事
- 【#CSharp】C#が2025年「プログラミング言語オブ・ザ・イヤー」獲得 【2026年01月16日(金)】
- なんと!今週の土曜日も仕事してますた.来週の土曜日も仕事臭い.TCPソケット通信をゴリゴリ書いてる 【2025年08月30日(土)】
- 【ChatGPT o4】祝日なのに仕事ーバテすぎー今夜こそ絶命だーモルモルモル 【2025年03月20日(木)】
- 【#CSharp】制御系が動き出したべ 【2025年02月20日(木)】
- 【#CSharp】ひっさしぶりにガッツリなC#案件をやっているぞー 【2025年02月19日(水)】
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センサにやりたい放題,イカガワシイ電文を投げつけられる!
あとから来られる方のために
事の顛末,記載しておきますわん.有効活用してくださいな

コメント
広島カープの羽月隆太郎容疑者、「ゾンビたばこ」使用の疑いで逮捕
【#総選挙】衆議院選挙 きょう公示 12日間の選挙戦へ
青森 スノーモービル乗るため入山の約10人と連絡取れず 遭難か
【#不発弾】宮崎市中心部の不発弾 17日に処理 避難指示や交通規制予定(26/1/17)
【総選挙】立民 公明 衆院選に向け新党結成で合意(26/1/15)
【大雪】大雪と雷及び突風に関する全般気象情報 第3号(26/1/1)
ブルーレイはオワコン? ソニー生産終了が意味する「次世代メディア」の失敗
ビジネスホテルで火事 1人遺体で見つかる 宿泊客4人けが 水戸
【#ドラセナ】御神木たる幸福の木(ドラセナ):花芽がほころびだした!すごい香りで部屋が満たされてる!