有一天,我意识到我的 Web 套接字在我的生产 Apache 服务器中无法工作。因此,我尝试在那里进行调试,发现没有任何问题,队列正在工作,套接字客户端正在连接,但在客户端没有接收到任何内容。
如何? - 不知道 从何时起? - 不知道
因此,我决定在本地环境中对其进行全部测试,就像我在部署之前所做的那样。
我正在使用 laravel-websockets 来实现 Web 套接字。
我正在使用下面的 Vue.js 代码来调试我的套接字连接:
import Echo from "laravel-echo";
import Pusher from "pusher-js";
window.Pusher = Pusher;
const token = "44|yiPuLJM1DviFgX7Aq6cZPam86eyQMYoNssZQs2gl"
const tenant = "test"
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'laravel_rdb',
wsHost: '127.0.0.1',
authEndpoint: 'http://localhost/myapp/public/broadcasting/auth',
encrypted: false,
forceTLS: false,
wsPort: 6001,
wssPort:6001,
disableStats: true,
enabledTransports: ['ws', 'wss'],
auth : {
headers : {
Authorization: "Bearer " + token,
Accept: "application/json",
'X-Tenant': tenant,
}
},
})
window.Echo.private(tenant + '.notifications.user.1')
.listen('NotifyUser', (e) => {
console.log(e)
})
window.Echo.connector.pusher.connection.bind('state_change', (state) => {
console.log('Debug - Current connection state: ' + state.current);
if (window.Echo.websocketsState !== '' && state.current === 'connected') {
console.log("Status Update: " + state.current);
} else if (window.Echo.websocketsState !== '' && state.current === 'failed') {
window.Echo.reconnectInterval = window.setInterval(() => {
var ifConnected = window.navigator.onLine;
if (ifConnected) {
clearInterval(window.Echo.reconnectInterval);
console.log("Status Update 2: " + state.current);
}
}, 3000);
}
window.Echo.websocketsState = state.current;
});
使用此代码,我可以看到 Web 套接字已成功连接,但控制台没有显示有关我发送消息的任何内容。
我正在使用数据库队列来处理套接字消息并使用
php artisan queue:work
我可以看到我的广播队列正在处理。
我也使用网络套接字仪表板进行了测试。当我启动 Vue.js 代码时,我可以看到我的频道已订阅,但是当我尝试从仪表板向该频道发送事件消息时,它什么也不做。没有错误,没有警报,什么都没有。
我没有对我的网络套接字代码进行任何更改。相同的代码运行良好,没有任何问题,但它突然停止工作,最令人沮丧的是根本没有错误。
我猜测唯一可能导致错误的因素是一些依赖包或 Laravel 框架本身的兼容性问题,因为我定期更新它们。我已经很长时间没有检查网络套接字了,所以我不太确定是什么导致了这个问题。
非常感谢你!!! 为此https://github.com/beyondcode/laravel-websockets/issues/1041 我一直在苦苦挣扎,websocket 已经好几天没有工作了。 这完全帮助了我。 再次感谢您