node.js - 将事件从 Node 客户端发送到 Laravel Echo 服务器

标签 node.js laravel laravel-echo

我正在尝试将一些事件从 Node 客户端发送到 Laravel echo 服务器。

互联网上没有太多文档。 我尝试使用 socket.emit() 来执行此操作,但没有事件到达回显服务器。

这是我的 app.ts 代码

import express = require('express');
import Echo from "laravel-echo";
import SocketIoClient from "laravel-echo";


// Create a new express application instance
const app: express.Application = express();
let io = require('socket.io-client');

let echo = new Echo({
  broadcaster: 'socket.io',
  host: 'http://3.16.169.253:6001',
  client: io
});


echo.channel('public').listen('drumdata', (e:any) => {
  console.log("DATA RECEIVED");
  console.log(e);
})

sendData();

async function sendData(){
for(let i=0;i<10;i++){
  await sleep(2000) 
  echo.connector.options.auth.headers['X-Socket-ID'] = echo.connector.socket.id
  echo.connector.socket.emit('drumdata', "public",{"eventData":"myData"}) ;

 }
}




function sleep(ms:number) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

Echo-Server 日志显示应用程序加入 channel ,但没有触发任何事件。

[3:25:25 PM] - S6s3SKH1L61C9U6NAAAr joined channel: public
[3:25:59 PM] - S6s3SKH1L61C9U6NAAAr left channel: public (transport close)
[3:26:08 PM] - qZljcx9BzDZOU-s8AAAs joined channel: public
[3:26:14 PM] - qZljcx9BzDZOU-s8AAAs left channel: public (transport close)
[3:27:02 PM] - 9--wTFOpWlZVIfw4AAAt joined channel: public

有人对此有什么建议吗?

编辑:

在 DEBUG 模式下运行 laravel-echo-server 显示已收到消息,但没有向 channel 触发任何事件。 我什至添加了“X-Socket-ID”身份验证 header 。

2019-07-09T10:09:10.381Z socket.io:socket got packet {"type":2,"nsp":"/","data":["drumdata","public",{"eventData":"pincia"}]}
2019-07-09T10:09:10.381Z socket.io:socket emitting event ["drumdata","public",{"eventData":"pincia"}]
2019-07-09T10:09:10.381Z socket.io:socket dispatching an event ["drumdata","public",{"eventData":"pincia"}]
2019-07-09T10:09:12.350Z engine:ws received "42["drumdata","public",{"eventData":"pincia"}]"
2019-07-09T10:09:12.350Z engine:socket packet
2019-07-09T10:09:12.350Z socket.io-parser decoded 2["drumdata","public",{"eventData":"pincia"}] as {"type":2,"nsp":"/","data":["drumdata","public",{"eventData":"pincia"}]}
2019-07-09T10:09:12.350Z socket.io:socket got packet {"type":2,"nsp":"/","data":["drumdata","public",{"eventData":"pincia"}]}
2019-07-09T10:09:12.350Z socket.io:socket emitting event ["drumdata","public",{"eventData":"pincia"}]
2019-07-09T10:09:12.350Z socket.io:socket dispatching an event ["drumdata","public",{"eventData":"pincia"}]
2019-07-09T10:09:14.350Z engine:ws received "42["drumdata","public",{"eventData":"pincia"}]"
2019-07-09T10:09:14.350Z engine:socket packet

谢谢, 费德里科

最佳答案

好吧,我开始了解这一切是如何工作的,文档并不是很有帮助,但看起来 echo 服务器使用 http api 来发布消息。在这种情况下,看起来他们推荐 axios。这个解决方案应该可行,但我无法弄清楚 channel 的路径应该是什么。一旦你弄清楚了这一点,你应该会看到你的事件从 Node 服务器传播。目前这只是 404。

const express = require('express');
const Echo = require('laravel-echo');
const io = require('socket.io-client');
const axios = require('axios');

// Create a new express application instance
const app = express();

const echo = new Echo({
  broadcaster: 'socket.io',
  host: 'http://127.0.0.1:6001',
  client: io
});


echo.channel('public').listen('drumdata', (e) => {
  console.log("DATA RECEIVED");
  console.log(e);
})


async function sendData(){
for(let i=0;i<10;i++){
  await sleep(2000);
  console.log('echoing'); // echo.socketId() is already set on X-Socket-Id thanks to Axios
  axios.post('http://127.0.0.1:6001/public/drumdata', {"eventData":"myData"})
    .then((response) => {
        console.log(response);
    });

 }
}

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

sendData();

关于node.js - 将事件从 Node 客户端发送到 Laravel Echo 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56938546/

相关文章:

php - 在laravel 4中的插入查询存储过程中传递参数

php - 同步 Laravel Eloquent 实例

php - Laravel Echo 从未收到事件

javascript - Laravel-echo-server 无法使用 https 协议(protocol)启动生产

node.js - OpenLayers v3 与 Webpack

node.js - 无法在 Protractor 中使用nodejs删除文件

php - 如何在 Laravel 5 中执行简单查询? DB::getQueryLog 给出数组

node.js - npm shrinkwrap 中的 fsevents(由 chokidar 引入)导致构建在 Windows 上失败

javascript - Canvas 未在 router.get 方法中更新

amazon-web-services - AWS EB : Error during WebSocket handshake: Unexpected response code: 400