iT邦幫忙

0

Laravel 與 WebSocket 連線如何取值?

請大大賜教:我的 WebSocket/GatewayWorker/Applications/YourApp/Events.php如下:

<?php
use \GatewayWorker\Lib\Gateway;

class Events
{    
    public static function onConnect($client_id)
    {
        Gateway::sendToClient($client_id, json_encode([
            'type' => 'init',
            'client_id' => $client_id
        ]));
    }

   public static function onMessage($client_id, $message)
   {
   }

   public static function onClose($client_id)
   {
       GateWay::sendToAll("$client_id logout\r\n");
   }
}

另外 在 Laravel 中用於連接的有 ChatRoom.vue 其中 script 部分如下:

<script>
    let ws = new WebSocket("ws://127.0.0.1:7272");
    export default {
        data() {
            return {

            }
        },
        created() {
            ws.onmessage = (e) => {
                console.log(e.data)
            }

        },
        methods: {

        }
    }
</script>

本來 console.log(e.data) 預期可以拿到 {'type' => 'init', 'client_id' => $client_id}

但是瀏覽器 卻都拿到login 的訊息 如下:
https://ithelp.ithome.com.tw/upload/images/20200405/20121754VhraLwHZd6.png

而當我試圖 字符串 轉 json時

                let data = JSON.parse(e.data)
                console.log(data)

就出現報錯如下:
https://ithelp.ithome.com.tw/upload/images/20200405/20121754TgBmyEnJOI.png

期待大神指點指點!預先感謝您熱情幫助。

經過了一夜,神奇地就好了。(如下圖)
感覺依然還在百里霧中
https://ithelp.ithome.com.tw/upload/images/20200406/20121754NZYnG4OQXo.png

froce iT邦大師 1 級 ‧ 2020-04-06 08:49:42 檢舉
把e.data的結果po上來啊。
瀏覽器告訴你e.data不是JSON...他沒辦法parse。
哈!,神奇的變正常了,看來可能又是我自己產生的 手殘、腦殘之類的錯誤,讓我先鄙視自己3秒鐘。

謝謝大大指點!
還是...,難道大大有神力啊! 拜.....

尚未有邦友回答

立即登入回答