npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-zeromq-socketio

v2.0.0

Published

ZeroMQ to React/ReactNative solution with SocketIO

Downloads

4

Readme

React/React-Native ZeroMQ-SocketIO Bridge

This is a simple ZeroMQ to React/React Native Bridge using SocketIO. This package can also be used with any project that uses SocketIO.

Installation

npm install react-zeromq-socketio or yarn add react-zeromq-socketio

Usage

In this package, there's a few steps to get started:

Create a file

First, you will need to create a file anywhere you want in your project.

Insert the following code into file

Here's a full example of how to use react-zeromq-socketio to start a server with custom options within file:

const zmqServer = require('react-zeromq-socketio');

const options = {
  port: 3005,
  subIP: 'tcp://127.0.0.1',
  subPORT: 5555,
  subTOPIC: 'topic',
  subEventName: 'sub',
  pubIP: 'tcp://127.0.0.1',
  pubPORT: 5556,
  pubTOPIC: 'topic',
  pubEventName: 'message',
  pullIP: 'tcp://127.0.0.1',
  pullPORT: 5557,
  pullEventName: 'worker',
  pushIP: 'tcp://127.0.0.1',
  pushPORT: 5558,
  pushEventName: 'message',
  reqIP: 'tcp://127.0.0.1',
  reqPORT: 5559,
  reqEventName: 'message',
  repIP: 'tcp://127.0.0.1',
  repPORT: 5560,
  repEventName: 'message', // Currently not used
  repREQUEST: 'Hello',
  repREPLY: 'World',
};

zmqServer.StartServer(options);

That is all for this part. Although this is an example, these options do have defaults if not set, which are the following:

// SocketIO port
const port = options.port || 3005;

/* SUBSCRIBER Settings */
const subIP = options.subIP || 'tcp://127.0.0.1';
const subPORT = options.subPORT || 5555;
const subTOPIC = options.subTOPIC || 'topic';
const subEventName = options.subEventName || 'message';

/* PUBLISHER Settings */
const pubIP = options.pubIP || 'tcp://127.0.0.1';
const pubPORT = options.pubPORT || 5556;
const pubTOPIC = options.pubTOPIC || 'topic';
const pubEventName = options.pubEventName || 'message';

/* PULL Settings */
const pullIP = options.pullIP || 'tcp://127.0.0.1';
const pullPORT = options.pullPORT || 6666;
const pullEventName = options.pullEventName || 'message';

/* PUSH Settings */
const pushIP = options.pushIP || 'tcp://127.0.0.1';
const pushPORT = options.pushPORT || 6667;
const pushEventName = options.pushEventName || 'message';

/* REQUEST Settings */
const reqIP = options.reqIP || 'tcp://127.0.0.1';
const reqPORT = options.reqPORT || 7777;
const reqEventName = options.reqEventName || 'message';

/* REPLY Settings */
const repIP = options.repIP || 'tcp://127.0.0.1';
const repPORT = options.repPORT || 7778;
const repEventName = options.repEventName || 'message';
const repREQUEST = options.repCODE || 'Hello';
const repREPLY = options.repREPLY || 'World';

NOTE: PORT's should be different from each other. For example: if you're PUBLISHING to this server, then you would use SUBSCRIBER within this file.

Defaults work. Just add a SocketIO port. Following example for minimal setup:

const zmqServer = require('react-zeromq-socketio');

const options = {
  port: 3005,
};

zmqServer.StartServer(options);

If you're having trouble, don't hesitate to send me a message.

Front-End Example with React Native

This has been tested with React Native. Although, I'm sure it'll work with React too. Just need to setup SocketIO with the right ServerURL and port.

The following example below will show a React Native Component importing SocketIO:

import React, { useState, useEffect } from 'react';
import { View, Text, TextInput, Button } from 'react-native';
import io from 'socket.io-client';

const serverURL = 'http://localhost:3005';
const socket = io(serverURL);

const Dev = () => {
  const [message, setMessage] = useState('');
  const [response, setResponse] = useState('');
  const [worker, setWorker] = useState('');

  useEffect(() => {
    // Establish connection to server
    socket.on('connect', () => {
      console.log('Connected to server!');
    });

    // Listen for incoming messages from the server over Socket.io
    // Make sure EventName('sub') is the same as subEventName
    // Change this if you're using default to 'message'
    socket.on('sub', (data) => {
      setResponse(data); // SUBSCRIBER received message from PUBLISHER
    });

    // Make sure EventName('worker') is the same as pullEventName
    socket.on('worker', (data) => {
      setWorker(data); // WORKER received message from PRODUCER
    });

    return () => {
      // Disconnect from the server when the component unmounts
      socket.disconnect();
      console.log('Disconnected from server');
    };
  }, []);

  const sendMessage = () => {
    // Send a message to the server over Socket.io
    // Technically this is used as a PUBLISHER, or PUSH.
    // Make sure EventName('message') is the same.
    socket.emit('message', message);
  };

  return (
    <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
      <TextInput
        value={message}
        onChangeText={setMessage}
        style={{ borderWidth: 1, padding: 10, margin: 10, width: '80%' }}
      />
      <Button title="Send" onPress={sendMessage} />
      {response ? <Text>Subber Data: {response}</Text> : null}
      {worker ? <Text>Worker Data: {worker}</Text> : null}
    </View>
  );
};

export default Dev;

This component works with the first set of options. If you just want to see a simple PUB/SUB example. Just replace your EventName('sub', 'worker') to the default message.

Contributing

Just started this out by looking for a solution to send ZeroMQ data to the front-end. If you would like to contribute, don't hesitate to contact me. Check out my Github: andresev

Acknowledgments

I would like to thank the following resources and individuals for their help in creating this package:

  • Colleen Boehme - for providing valuable feedback and suggestions.

  • Noah Reed - for providing valuable feedback and suggestions during the development process.

  • SocketIO - for providing a powerful high-performance light-weight messaging library that allowed me to communicate with React/React-Native.

  • ZeroMQ - for providing a high-performance messaging library that allowed me to build the socket communication layer of this package.

Thank you all for your contributions to this project!