首页 文章

如何从siddhi事件模拟器发送事件到android siddhi应用程序

提问于
浏览
0

我在Android上运行了一个siddhi cep应用程序 . 现在我想通过套接字连接将事件模拟器中的事件从流处理编辑器发送到Android应用程序 . 直到现在我已成功制作了听取我制作的python客户端模拟器的android服务器套接字 . 但为了简化这个过程,我是否有可能使用事件模拟器将事件发送到android siddhi应用程序?

我想知道我是否可以更改一些配置,以便事件模拟器将事件发送到android套接字,所以我查看了 deployment.yaml 文件中的设置

enter image description here

但发送配置是为 HTTP 定义的

senderConfigurations:
    -
      id: "http-sender"

  # Configuration used for the databridge communication
databridge.config:
    # No of worker threads to consume events
    # THIS IS A MANDATORY FIELD
  workerThreads: 10
    # Maximum amount of messages that can be queued internally in MB
    # THIS IS A MANDATORY FIELD
  maxEventBufferCapacity: 10000000
    # Queue size; the maximum number of events that can be stored in the queue
    # THIS IS A MANDATORY FIELD
  eventBufferSize: 2000
    # Keystore file path
    # THIS IS A MANDATORY FIELD
  keyStoreLocation : ${sys:carbon.home}/resources/security/wso2carbon.jks
    # Keystore password
    # THIS IS A MANDATORY FIELD
  keyStorePassword : wso2carbon
    # Session Timeout value in mins
    # THIS IS A MANDATORY FIELD
  clientTimeoutMin: 30
    # Data receiver configurations
    # THIS IS A MANDATO

提前致谢 . 如果您需要更多详细信息,请告诉我们


编辑1

我实际上找到了解决方法,但它有一些问题 . 所以基本上我将 event generator 的输出接收器重定向到端口,以便接收器具有所有数据流 . Stream Processor Studio editor 的代码是

@App:name("PatternMatching")

@App:description('Identify event patterns based on the order of event arrival')

define stream RoomTemperatureStream(roomNo string, temp double);

@sink(type="tcp",  url='tcp://localhost:5001/abc', sync='false', tcp.no.delay='true', keep.alive='true', worker.threads="10", @map(type='text'))
define stream RoomTemperatureAlertStream(roomNo string, initialTemp double, finalTemp double);

--Capture a pattern where the temperature of a room increases by 5 degrees within 2 minutes
@info(name='query1')
from RoomTemperatureStream
select e1.roomNo, e1.temp as initialTemp, e2.temp as finalTemp
insert into RoomTemperatureAlertStream;

它将流作为文本发送到python服务器,需要先启动,代码是

#!/usr/bin/env python
# Author : Amarjit Singh
import pickle
import socket

import pandas
from pandas import json

if __name__ == "__main__":


    # ------------------ create a socket object-----------------------#
    try:
        serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error as err:
        serversocket.close()
        print("socket creation failed with error %s" % (err))

    except KeyboardInterrupt:
        serversocket.close()
        print("KeyboardInterrupt - but server socket was closed ")



    host = "127.0.0.1"
    Server_port = 5001

    # ------------------ binding to the port -----------------------#

    try:

        serversocket.bind((host, Server_port))
        serversocket.listen(50)  # queue up to 5 requests

        print("\n Server has started and waiting for connection request   ..... ")

        # bind to the port
        while True:  # extra while is created  so that server runs even if there is no data

            running = True
            clientsocket, addr = serversocket.accept()  # accept a connection from client



            print("Got a connection from Server%s" % str(addr))  # show connection success message


            while running:

                receivedData = clientsocket.recv(2048)
                # json = receivedData

                if receivedData:

                    print(receivedData)
                    print(receivedData[0])
                    print(receivedData[1])
                    print(receivedData[2])


                    # roomNo = str(receivedData[0])
                    # temp = int(client_tuple[1])  # from unicode to int
                    #
                    # print(" roomNo = %d:  UUID = %s temp = %d" % (roomNo, temp))


    except socket.error as err:
        serversocket.close()
        print("socket creation failed with error %s" % (err))

    except KeyboardInterrupt:
        serversocket.close()
        print("KeyboardInterrupt - but server socket was closed ")

最初,我从模拟器发送 json 数据,但 pickle.loadsjson.loads 无法正常工作 . 但文本的问题是数据显示为

b'\x02\x00\x00\x00t\x00\x00\x003bed14d31-6697-4a74-8a3f-30dc012914ad-localhost:5001\x00\x00\x00\x03abc\x00\x00\x002roomNo:"X0ZYp",\ninitialTemp:15.97,\nfinalTemp:17.22'

b'\x02\x00\x00\x00t\x00\x00\x003bed14d31-6697-4a74-8a3f-30dc012914ad-localhost:5001\x00\x00\x00\x03abc\x00\x00\x002roomNo:"2X951",\ninitialTemp:13.42,\nfinalTemp:10.76'

b'\x02\x00\x00\x00t\x00\x00\x003bed14d31-6697-4a74-8a3f-30dc012914ad-localhost:5001\x00\x00\x00\x03abc\x00\x00\x002roomNo:"PUaJA",\ninitialTemp:15.46,\nfinalTemp:16.26'

b'\x02\x00\x00\x00t\x00\x00\x003bed14d31-6697-4a74-8a3f-30dc012914ad-localhost:5001\x00\x00\x00\x03abc\x00\x00\x002roomNo:"pnz0i",\ninitialTemp:10.42,\nfinalTemp:15.82'

how to remove this extra data?

1 回答

  • 2

    Siddhi有一个WebSocket连接器[1],它仍然是WIP . 使用此依赖关系,您将能够向应用程序添加WebSocket接收器并从中发送事件 .

    不幸的是,您不能直接从Stream Processor [2] Studio / Editor发送事件,但如果您有一个在Stream Processor Editor中运行的应用程序,并且它有一个WebSocket接收器,那么您可以从模拟器发送事件到App的接收器流,这将实习发送那个消息通过WebSocket到android中的Siddhi应用程序 .

    您只能通过事件模拟器模拟在编辑器中运行的应用程序,或通过事件模拟器API模拟部署在流处理器工作程序节点中的应用程序 .

    [1] https://github.com/wso2-extensions/siddhi-io-websocket

    [2] https://wso2.com/analytics

相关问题