I'm writing a TCP server application using NodeJS. However, each socket runs on a separate child-process (server.on("connection")). To send messages to specific clients, I used Emitter, and each socket generates its own listener (on clientID). So if there are 10000 connected devices, the application will create 10000 listeners. This looks terrible. What dangers will this pose? I can't find a solution to send a message from one client to another in the TCP protocol writing NodeJS code. Update: Have any idea to send message to specific client without add custom listeners?
What does it matter if there are many nodejs emitter listeners?
167 Views Asked by Huy Quoc At
1
There are 1 best solutions below
Related Questions in JAVASCRIPT
- Angular Show All When No Filter Is Supplied
- Why does a function show up as not defined
- I count the time the user takes to solve my quiz using Javascript but I want the same time displayed on another page
- Set "More" "Less" font size
- Using pagination on a table in AngularJS
- How to sort these using Javascript or Jquery Most effectively
- how to fill out the table with next values in array with one button
- State with different subviews
- Ajax jQuery firing multiple time display event for the same result
- Getting and passing MVC Model data to AngularJS controller
- Disable variable in eval
- javascript nested loops waiting for user input
- .hover() seems to overwrite .click()
- How to sort a multi-dimensional array by the second array in descending order?
- How do I find the fonts that are not loading in a CORS situation ( MoovWeb )?
Related Questions in NODE.JS
- How to solve CERT_UNTRUSTED error in nodemailer
- Run a loop over a callback, node js
- Implementing prerender.io middleware in sails.js
- Token based authorization in nodejs/ExpressJs and Angular(Single Page Application)
- formatting path string in javascript
- One to One screensharing using WEBRTC
- Create polygon from grid (for collisions)
- Strange npm behavior when installing packages like grunt
- Convert JSON.gz to JSON in node js
- "Your npm version is outdated." but it's not. While install yo
- Why put methods on the prototype of a class instead of declaring them in the constructor?
- Node JS Async Response
- mongoose get property from nested schema after `group`
- Cannot Receive Incoming call on Twilio android Client
- How can I change a specific line in a file with node js?
Related Questions in TCP
- having spring integration tcpserver to manage clients and send them messages
- psuedo TCP multicast with os.dup2() in python?
- Retrieve Data From EOC(Eithernet Over coxial) device
- Connecting a web client to a c++ server with TCP
- ECONNRESET on node.js RabbitMQ consumer in Azure
- how to respond from plain tcp client to MessagingTemplate's sendAndReceive
- Java Socket - how does the read() method know if the end of stream has been reached?
- Scala - TCP Packet frame using Akka
- Re-transmission concept in TCP
- Issues regarding multiplayer networking: input
- Getting and Sending Data between a Server and Client
- Jamod Slave Example, can not connect to slave
- Android Phone not sending data over TCP/ip
- Lot of TIME_WAIT connections while using RestTemplate?
- How do I use the windows service and WCF to update some record in database?
Related Questions in EMITTER
- Cannot Click UIButton When Particle Emitter Is On Screen
- Spring Web-Flux Server Sent Events is not working when using IP for local and remote calls
- Ngxs state with emitter problem with sonar test - state was used before it was defined?
- Particle stutters the first time it is spawned (UE4)
- PHP Emitter for socket.io v4
- What does it matter if there are many nodejs emitter listeners?
- Communication webots emitter and receiver
- Angular 4 Event Emitter not Emitting
- How to Store an Emmiter.io received messages in a Variable and send as props
- How to use the OpenFaas 'mqtt-publisher' with FaasD
- Is there a way about how to send a value from the Child component to the Parent component using EventEmitter but without using event binding?
- Event Emitter in Java
- What are the typical values for the three inputs to the Driver circuit board of Infrasolid's thermal emitters in Hispower series?
- Adding different objects to CAEmitterLayer with forEach with SwiftUI
- Angular 6 - How to notify child component about @output finishing job?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Why would you do that? The core idea behind NodeJS is to run things in an event loop. Single threaded, yes, but asynchronous.
It is terrible. The biggest issue is that you sacrifice a lot of resources. You not only spawn thousands of processes but you also spawn lots of emitters. So first of all this means lots of RAM eaten. Secondly this means degraded performance due to process context switch, which typically is slower than user space switch. Assuming your machine will even allow you to spawn so many processes.
I assume you have a TCP server, two connected clients and client A wants to send message to client B. Is that correct? TCP by itself won't do that for you. You need some protocol on top of it. For example:
(username, password)pair to the server. The server validates the pair. The server keeps a global mapping{"<username>": [sockets]}and adds newly authenticated client to that mapping.{"type": "direct", "destination": "clientB", "data": "hello B"}. The server parses the message and forwards it to the appropriate client (taken from the global mapping).In case when you want to broadcast the message you send say
{"type":"broadcast", "data": "hello all"}kind of message. The server then parses it, it loops through all connected clients (found in the global mapping) and forwards the message to each client.Of course you also need some framing of packets. Since TCP is a stream, then it doesn't really understand messages and where one starts and the other ends. Dumping things to JSON is a half of the problem. Because then you have to send this JSON over the network and the other side has to know how many bytes it has to read. One way is to prefix each message with, say, 2 bytes that tell the other side how long the message is.
Btw you may want to consider using socket.io (or some other lib) that take care of some of those tedious details for you.