【#Laravel】laravel-echo&C#でプライベートチャネル通信が動かない!(いや,動かす方法を見つけた)
関連記事
- 【#apache #PHP】apacheが立ち上がらなくなったー「アクセス許可で禁じられた方法でソケットにアクセスしようとしました」エラー発生 【2024年04月16日(火)】
- 【#Laravel #PHP】久しぶりにLaravelと格闘しておるがすっかり忘れちょる(汗 【2024年04月12日(金)】
- 【#CSHARP】ソリューション内でサービス,Winformアプリを混在で作成させ,バイナリ出力先を同じにするとサービスが起動しない 【2024年02月08日(木)】
- 【#PHP】謎な #Laravel 案件 引き渡したじ 【2024年01月11日(木)】
- 【PHP】PHPのバージョンをアップしたら,「tcpdf」フレームワークがエラー吐きまくりで,こっちまで吐きそうになった 【2024年01月10日(水)】
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の画面見たら...
![](https://gurizuri0505.halfmoon.jp/wp-content/uploads/2021/05/WS000008-300x46.jpg)
「認証エラー」
はい?なして認証エラー何じゃ??
って通信ログ見たいけど,node.jsもlaravel-echo-serverもLaravelもろくなログは出してくれない
これは詰んだ感
何が起こってるのか把握できんべ
昨日はそのまま床についた...床の中で閃いた!
localhostのTCPパケットを横取りキャプチャして,TCP電文を解析すればいいんじゃね?
朝,TCPパケット解析アプリ「wireshark」登場
![](https://gurizuri0505.halfmoon.jp/wp-content/uploads/2021/05/WS000009-300x197.jpg)
TCPパケットの解析とか20数年ぶりの予感...モルモルモル
さっそく動かしてTCPの生電文を採取
該当電文が居た!!(2741行目)
![](https://gurizuri0505.halfmoon.jp/wp-content/uploads/2021/05/WS000010-300x215.jpg)
認証文字列を含む電文中に散見される「¥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 } } }); }柏手打って,運転させてみた
キタ━━━━(゚∀゚)━━━━!!
![](https://gurizuri0505.halfmoon.jp/wp-content/uploads/2021/05/WS000011-300x94.jpg)
プライベートチャネルも認証通って通信開始した!!
これで,完全にWebSocketの技術獲得したべ
IcTセンサにやりたい放題,イカガワシイ電文を投げつけられる!
あとから来られる方のために
事の顛末,記載しておきますわん.有効活用してくださいな
コメント
九州自動車道 トンネル内で大型トレーラーから出火 人吉~八代間で通行止め(24/7/26)
【#ご到着シリーズ】冷凍かしわ飯&冷凍かしわうどんセットに当選したモルモルモル
【#破局噴火】イエローストーンで大規模な水蒸気爆発が発生
暑すぎてダレてる.なんのやる気も起こらんドロドロドロ
【#Windows #CrowdStrike】セキュリティーソフト世界シェア1位があだ…ウィンドウズ障害、「過去最大規模」の見方も
3連休,らしい.これといって予定はない(爆
【#trump #shooting】トランプ暗殺未遂:トランプ氏 集会で発砲音「前大統領は無事」死者も
【#線状降水帯】九州北部山口県に線状降水帯発生予測情報発令(24/7/13)
【#落雷】今朝の雷,すごかったー 清武城かお隣のマンションに落雷したー共用部の電源落ちてるテレビが映らない!
【#彗星】紫金山アトラス彗星(C/2023 A3)がぶっ壊れた!今秋,見れると思ってたのにピエン