You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native无法连接Laravel Websocket 求可行配置方案

React Native 无法连接 Laravel WebSocket 求助

我没法从React Native应用连接到Laravel的WebSocket,几乎试遍了带“pusher”“websockets”关键词的npm包,全都不管用,已经卡壳很久了。

已安装的npm包:

"react-native-use-websocket": "^0.2.6",
"react-native-websocket": "^1.0.2",
"laravel-echo": "^1.15.0",
"pusher-js": "^8.0.1",
// 按官方文档配置均无效...

Laravel端完全正常:启动WebSocket服务器后,用Tinker测试,能在http://127.0.0.1:8000/laravel-websockets页面正常看到消息发送,但React Native端完全连不上。

Laravel 配置(已验证可用)

.env 文件

BROADCAST_DRIVER=pusher
//...
PUSHER_APP_ID=12345
PUSHER_APP_KEY=ADDADD123123
PUSHER_APP_SECRET=ADASADAS123123
PUSHER_HOST=127.0.0.1
PUSHER_PORT=6001
PUSHER_SCHEME=http
PUSHER_APP_CLUSTER=mt1

NewMessage.php 事件文件

use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class NewMessage implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $message;
    /**
     * Create a new event instance.
     */
    public function __construct($message)
    {
        $this->message = $message;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return array<int, \Illuminate\Broadcasting\Channel>
     */
    public function broadcastOn()
    {
        // return [
        //     new PrivateChannel('channel-name'),
        // ];
        return new Channel('home');
    }
}

尝试过的无效方案

方案1:使用 pusher-js

代码如下:

import Pusher from 'pusher-js/react-native';
import { SafeAreaView, Text, useState, useEffect } from 'react-native';

const PusherTest = () => {
  const [message, setMessage] = useState([]);
  useEffect(() => {
    const pusher = new Pusher('ADDADD123123', {
      cluster: 'mt1',
      encrypted: true,
      wsHost: '127.0.0.1',
      wsPort: 6001,      
    });

    const channel = pusher.subscribe('home');

    channel.bind('App\\Events\\TestEvent', (data) => {
      console.log('Received event:', data);
      setMessage(data);
    });

    return () => {
      pusher.disconnect();
    };
  }, []);

  return (
    <SafeAreaView>
      <Text>Hi</Text>
      <Text>{message}</Text>
    </SafeAreaView>
  )
};

export default PusherTest;

出现错误:

ReferenceError: Can't find variable: Buffer

方案2:使用 socket.io

代码如下:

import React, { useState, useEffect } from 'react';
import { Text } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { io } from 'socket.io-client';

const SOCKET_SERVER_URL = 'http://localhost:6001'; // WebSocket服务器地址

const WebSocketTest = () => {
    const [messages, setMessages] = useState([]);

    useEffect(() => {
        const socket = io(SOCKET_SERVER_URL);
        
        socket.on('connect', () => {
            console.log('已连接到WebSocket服务器');
        });

        socket.on('disconnect', () => {
            console.log('已断开与WebSocket服务器的连接');
        });

        socket.on('message', (data) => {
            console.log('收到消息:', data);
            setMessages((messages) => [...messages, data]);
        });

        return () => {
            socket.disconnect();
        };
    }, []);

    return (
        <SafeAreaView>
            <Text>Hi</Text>
            {messages.map((message, index) => (
                <Text key={index}>{message}</Text>
            ))}
        </SafeAreaView>
    );
};

export default WebSocketTest;

没有任何响应,且找不到指定订阅频道的相关文档。

只求能实现最基础的连接和消息接收,有没有可行的配置方案?

内容的提问来源于stack exchange,提问作者ferter3006

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:47:39