如何将 WSO2CEP 与 Socket.io 连接?

How to Connect WSO2CEP with Socket.io?

我想创建一个通过 Websocket 连接的事件发布器。当我尝试将它与我的简单套接字 io 服务器连接时,url 是

 ws://localhost:3000/socket.io/

没有收到流..

我已经像这样设置了流的内联格式:

42["input-message",{"LAT":{{latitude}},"LON":{{longitude}}}]

如果我正确理解你的问题,

  • 从 CEP 发布事件时您不会收到任何错误 服务器
  • 但是socket io服务器没有显示任何迹象表明它 也收到了事件。

CEP 服务器未显示错误日志表示:

  • CEP 服务器已成功连接到套接字 io 服务器。 (如果连接断开,那么您应该会看到错误日志,CEP 将尝试重新连接)
  • 可能事件是由 Websocket 发布者发送到 socket io 服务器(或者 Websocket 发布者根本没有收到任何要发送到 socket io 服务器的事件)
    • (当您发送事件时,如果 CEP 服务器无法解析该事件,那么您也应该会看到错误日志。)

以下几点可能有助于您解决问题:

  1. 在您的 websocket 发布者 (You may refer to this 'Event Tracer' doc) 中启用跟踪。然后发送事件并检查跟踪。这将允许您验证 Websocket 发布者是否收到了事件。
  2. 如果显示了发布者的踪迹,但 socket io 服务器仍未收到任何事件,则可能是 socket io 服务器发生了一些错误,并且未记录异常(可能已被吞噬) .

希望这会有所帮助。

因为我不能直接连接到 socket.io,所以我创建了一个简单的 websocket 作为中间件,将输入从 WSO2CEP 发送到 socket.io

var io = require('socket.io').listen(server);
io.set('origins', '*:*');

var WebSocketServer = require('ws').Server, 
   wss = new WebSocketServer({ port: 8087 })

//wss sending every message that it received to the socket.io
wss.on('connection', function connection(ws) {
  console.log('a WSO2CEP-PUBLISHER is connected');
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
    io.emit('input-message', JSON.parse(message));
  });
});

请注意,来自事件发布者的数据是字符串格式的,因此如果需要将其作为 JSON 对象发送,请使用 JSON.parse() 函数。