【发布时间】:2019-11-18 04:23:12
【问题描述】:
我正在尝试将一些事件从节点客户端发送到 Laravel 回显服务器。
互联网上没有那么多文档。
我尝试使用 socket.emit() 来完成此操作,但没有事件到达 echo-server。
这是我的 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 日志显示应用程序加入了频道,但没有触发任何事件。
[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 显示消息已收到,但没有向通道触发事件。 我什至添加了“X-Socket-ID”身份验证标头。
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
谢谢, 费德里科
【问题讨论】:
-
看起来你只需要触发事件函数?laravel.com/docs/5.8/broadcasting#broadcasting-events
-
我的意图是从节点调度事件而不是形成 laravel...
-
因此,如果您打算从节点进程发出,您将需要一个 EventEmitter 并且您需要将一个函数附加到一个通知通道的事件。您甚至可以通过管道从发射器到通道,因为它们都是事件流。 nodejs.org/api/events.html#events_events
-
你可以使用 laravel-echo-server 的 http api 来发出事件:docs github.com/tlaverdure/laravel-echo-server#http
-
面临同样的问题
标签: node.js laravel laravel-echo