Node.js server as both a Socket.io host and client - node.js

For historical reasons and technical necessity our app has the following configuration:
The node.js workers need to connect (using Socket.IO-Client) to the node.js database access point AND listen for a connection from the node.js servers (using Socket.IO). I am having issues getting both to connect and I am wondering, do I need to use different ports for each Socket.IO-client or can they operate on the same port?
Right now, things seem to connect for a moment, but no data is passed along.
Adding larger version of the image: Larger Image

Related

beginner webrtc/nodejs issue connecting remote clients

I'm trying to develop a web application in nodejs. I'm using an npm package called "simple-peer" but i don't think this issue is related to that. I was able to use this package and get it working when integrating it with a laravel application using an apache server as the back end. I could access the host machine through it's IP:PORT on the network and connect a separate client to the host successfully with a peer-to-peer connection. However, I'm now trying to develop this specifically in node without an apache back end. I have my express server up and running on port 3000, I can access the index page from a remote client on the same network through IP:3000. But when I try to connect through webrtc, I get a "Connection failed" error. If I connect two different browser instances on the same localhost device, the connection succeeds.
For reference: i'm just using the copy/pasted code from this usage demo. I have the "simplepeer.min.js" included and referenced in the correct directory.
So my main questions are: is there a setting or some webRTC protocol that could be blocking the remote clients from connecting? What would I need to change to meet this requirement? Why would it work in a laravel/webpack app with apache and not with express?
If your remote clients can not get icecandidates, you need TURN server.
When WebRTC Peer behind NAT, firewall or using Cellular Network(like smartphone), P2P Connection will fail.
At that time, for fallback, TURN server will work as a relay server.
I recommend coTURN.
Here is an simple implementation of simple-peer with nodejs backend for multi-user video/audio chat. You can find the client code in /public/js/main.js. Github Project and the Demo.
And just like #JinhoJang said. You do need a turn server to pass the information. Here is a list of public stun/turn servers.

socket.io client can't upgrade from XHR long polling to websocket

We have a server which do implement socket.io in NodeJS on Heroku.
We have a bunch of clients (Raspberry pi's) destributed on different networks across our country. They do implement socket.io clients in a NodeJS application.
It do work very well on 17/18 devices. We do have one device which are not able to upgrade the socket.io connection from a long-polling type to an actual websocket.
I cannot find the reason why.
Our server is setup with the following options:
Server settings
This is what the logs on our heroku server tells about the connection with the problematic client:
Heroku logs
As all clients are setup exactly the same way, i do not actually suspect any problems on the raspberries themselves.
Could it be a network problem where this one client is located?
- Behind the router, blocking some port etc?
Hope you have some suggestions to what the problem could be.
You tell if you need anymore information.

How to create a sails.js app that will listen on two different ports simultaneously

For example, I have a sails.js application that (by default) listens on port 1337. I want to configure it to listen on two different ports at the same time - one for SSL and one for non-SSL traffic. Is this even possible? I have scoured the documentation and cannot find an example that shows me anything other than setting a single port value.
Do I have to create an front-end that (like Apache or nginx) to do it is it it possible to stick with a pure node.js solution - perhaps with express?
I should add that I am only using the server for web sockets via socket.io
A working example would be great, but any tips and pointers would help.
the simplest would probably be to run your server twice.
Just make sure you share common data like sessions and persistent global variables - maybe using something like redis (sails can automatically base your session on redis and can even bind a model on the redis server while keeping the rest on your current database)

Create websocket connection between another server and a client

I'm building a desktop application where clients will interface with the server through the browser, but will also connect to eachother using a local node.js server. This means that every client has a local node.js server running.
I want to allow users to connect to the central webserver with the browser, and then initialize direct connections to other client's local node.js server. Is there a production ready way to expose a local node.js server to the outside world, or otherwise proxy the connection between the two?
Right now, my solution is to use localtunnel to expose the server, and then make a connection. As far as I understand, this is not recommended, and I'm looking for something better.

How to create a realtime chat using socket.io with using multiple servers (multiple ip)

I have done to develope the socket.io realtime app. but this feature cant worked at loadbalance node installed servers like as diff ip.
this one is worked at only same server with same port only? here, data stored at server side like memcache & mongos
you can use redis as store with socket.io to load balance.
Basic demo here:
https://github.com/chirag04/socket.io-express-redis-demo

Resources