【#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の画面見たら...
「認証エラー」
はい?なして認証エラー何じゃ??
って通信ログ見たいけど,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センサにやりたい放題,イカガワシイ電文を投げつけられる!
あとから来られる方のために
事の顛末,記載しておきますわん.有効活用してくださいな
コメント
急激に寒くなってキター 晩秋がやってきた!
【#諸塚村】連休初日のBBQの模様なぞをアップしてみる
冷房なしで日中過ごすの,いつ以来よっ!?優しい涼しさが心地よい
【#異星人 発見!】異星人から謎の暗号メールを受け取った!解読不能ヤバス【シレペヒキク】
タッパーウェアが破産申請を計画、事業てこ入れ策つまずく-関係者
電子レンジが不調になったヤバス
【#地震】霧島山で有感地震 生駒高原のあたりか?(24/9/6)
奄美大島のマングース 環境省が根絶宣言