ECONNREFUSED on running localhost server from NodeJS - javascript

I have a NodeJS server up and running on my local machine that is listening to port 50000.
From another server, that is also running on my local machine, I need to make a simple GET request to that server, but all I get is an ECONNREFUSED error:
{ Error: connect ECONNREFUSED 127.0.0.1:50000
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 50000 }
My request looks as follows, using request:
var options = {
url: "http://localhost:50000",
method: "GET"
}
request(options, function(error, response, body) {
if (error) {
console.log("[" + getDateTime() + "] Error connecting to localhost:");
console.log(error);
return;
}
// continue ...
I know that the server is up and running and that the endpoint is defined, because I can do the request to that exact same url in postman or in my browser and get a response, but somehow not in my NodeJS code.
Anybody have an idea?

The possible issue is that some else process is already running on the same port you are trying to use, either change your port or kill the existing process on your port. To kill the process on port you can try:
For mac:
sudo kill $(lsof -t -i:8000)
# or
sudo fuser -k -n tcp 8000
# or
fuser -k 8000/tcp
And for windows check this
hope this helps :)

You might be running both the servers on the same port, kill another server on same port.
If you're on linux, you can kill port using sudo fuser -k -n tcp 5000
or if you're using windows: taskkill /PID 5000 /F

Just as commented, changing "localhost" to "http://127.0.01:50000" worked for me.
I ll leave a link down here for a possible explanation for this issue
https://github.com/node-fetch/node-fetch/issues/1624#issuecomment-1235826631

Related

Nodejs Error: listen EADDRINUSE: address already in use :8080

My app was not running but when I try "npm start" command it throws error
Error: listen EADDRINUSE: address already in use :8080
I restart my EC2 instance and try this command again, but I face same error. How do I start my Node server?
Going by your comments, it looks like you have a node process already running your EC2 instance and it's listening on port 8080.
As you have stated lsof -i tcp:8080 gives you,
node 3255 root 20u IPv6 20660 0t0 TCP *:webcache (LISTEN)
The PID of this process is shown in the 2nd column: 3255.
Kill it,
kill -9 3255
After this try running your npm start and it should work

Why do I keep getting a throw er on my ternimal [duplicate]

If I run a server with the port 80, and I try to use XMLHttpRequest I am getting this error: Error: listen EADDRINUSE
Why is it problem for NodeJS, if I want to do a request, while I run a server on the port 80? For the webbrowsers it is not a problem: I can surf on the internet, while the server is running.
The server is:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
And the request:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
sys.puts("State: " + this.readyState);
if (this.readyState == 4) {
sys.puts("Complete.\nBody length: " + this.responseText.length);
sys.puts("Body:\n" + this.responseText);
}
};
xhr.open("GET", "http://mywebsite.com");
xhr.send();
What really helped for me was:
killall -9 node
But this will kill a system process.
With
ps ax
you can check if it worked.
EADDRINUSE means that the port number which listen() tries to bind the server to is already in use.
So, in your case, there must be running a server on port 80 already.
If you have another webserver running on this port you have to put node.js behind that server and proxy it through it.
You should check for the listening event like this, to see if the server is really listening:
var http=require('http');
var server=http.createServer(function(req,res){
res.end('test');
});
server.on('listening',function(){
console.log('ok, server is running');
});
server.listen(80);
The aforementioned killall -9 node, suggested by Patrick works as expected and solves the problem but you may want to read the edit part of this very answer about why kill -9 may not be the best way to do it.
On top of that you might want to target a single process rather than blindly killing all active processes.
In that case, first get the process ID (PID) of the process running on that port (say 8888):
lsof -i tcp:8888
This will return something like:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 57385 You 11u IPv6 0xac745b2749fd2be3 0t0 TCP *:ddi-tcp-1 (LISTEN)
Then just do (ps - actually do not. Please keep reading below):
kill -9 57385
You can read a bit more about this here.
EDIT: I was reading on a fairly related topic today and stumbled upon this interesting thread on why should i not kill -9 a process.
Generally, you should use kill -15 before kill -9 to give the target process a chance to clean up after itself. (Processes can't catch or ignore SIGKILL, but they can and often do catch SIGTERM.) If you don't give the process a chance to finish what it's doing and clean up, it may leave corrupted files (or other state) around that it won't be able to understand once restarted.
So, as stated you should better kill the above process with:
kill -15 57385
EDIT 2: As noted in a comment around here many times this error is a consequence of not exiting a process gracefully. That means, a lot of people exit a node command (or any other) using CTRL+Z. The correct way of stopping a running process is issuing the CTRL+C command which performs a clean exit.
Exiting a process the right way will free up that port while shutting down. This will allow you to restart the process without going through the trouble of killing it yourself before being able to re-run it again.
Just a head's up, Skype will sometimes listen on port 80 and therefore cause this error if you try to listen on port 80 from Node.js or any other app.
You can turn off that behaviour in Skype by accessing the options and clicking Advanced -> Connection -> Use port 80 (Untick this)
P.S. After making that change, don't forget to restart Skype!
You should try killing the process that is listening on port 80.
Killall will kill all the node apps running. You might not want to do that. With this command you can kill only the one app that is listening on a known port.
If using unix try this command:
sudo fuser -k 80/tcp
Error reason: You are trying to use the busy port number
Two possible solutions for Windows/Mac
Free currently used port number
Select another port number for your current program
1. Free Port Number
Windows
1. netstat -ano | findstr :4200
2. taskkill /PID 5824 /F
Mac
You can try netstat
netstat -vanp tcp | grep 3000
For OSX El Capitan and newer (or if your netstat doesn't support -p), use lsof
sudo lsof -i tcp:3000
if this does not resolve your problem, Mac users can refer to complete discussion about this issue Find (and kill) process locking port 3000 on Mac
2. Change Port Number?
Windows
set PORT=5000
Mac
export PORT=5000
Under a controller env, you could use:
pkill node before running your script should do the job.
Bear in mind this command will kill all the node processes, which might be right if you have i.e a container running only one instance, our you have such env where you can guarantee that.
In any other scenario, I recommend using a command to kill a certain process id or name you found by looking for it programmatically. like if your process is called, node-server-1 you could do pkill node-server-1.
This resource might be useful to understand:
https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/
lsof -i:3000;
kill -9 $(lsof -t -i:3000);
// 3000 is a your port
// This "lsof -i:3000;" command will show PID
kill PID
ex: kill 129393
Another thing that can give this error, is two HTTP servers in the same node code. I was updating some Express 2 to Express 3 code, and had this...
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
// tons of shit.
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
And, it triggered this error.
Your application is already running on that port 8080 .
Use this code to kill the port and run your code again
sudo lsof -t -i tcp:8080 | xargs kill -9
This works for me (I'm using mac). Run this command
lsof -PiTCP -sTCP:LISTEN
This's going to display a list of ports that your syetem is using. Find the PID that your node is running
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 17269 hientrq 16u IPv6 0xc42959c6fa30c3b9 0t0 TCP *:51524 (LISTEN)
node 17269 hientrq 19u IPv4 0xc42959c71ae86fc1 0t0 TCP localhost:1337 (LISTEN)
and run kill -9 [YOUR_PID]
EADDRINUSE means that the port(which we try to listen in node application) is already being used. In order to overcome, we need to identify which process is running with that port.
For example if we are trying to listen our node application in 3000 port. We need to check whether that port is already is being used by any other process.
step1:
$sudo netstat -plunt |grep :3000
That the above command gives below result.
tcp6 0 0 :::3000 :::* LISTEN 25315/node
step2:
Now you got process ID(25315), Kill that process.
kill -9 25315
step3:
npm run start
Note: This solution for linux users.
sudo kill $(sudo lsof -t -i:80)
for force kill
sudo kill -9 $(sudo lsof -t -i:80)
use above cmd to kill particular port and then run your server
Try both commands and it will stop all node process.
killall 9 node
pkill node
npm start
In below command replace your portNumber
sudo lsof -t -i tcp:portNumber | xargs kill -9
There is a way to terminate the process using Task Manager:
Note that this solution is for Windows only
Go to the Task Manager (or using the shortcut Ctrl + Shift + Esc)
On "Background Processes", find "Node.js" processes and terminate them (Right-click them and choose "End Task")
Now you should be able to start again
This error comes when you have any process running on a port on which you want to run your application.
how to get which process running on that port=>
command:
sudo netstat -ap | grep :3000
output : you will get the process information which is using that port
tcp 0 0 IPaddress:3000 : LISTEN 26869/node
Now you can kill that process
sudo kill -9 26869
EADDRINUSE means port of your nodejs app is already in use.
Now you have kill the process/app running on that port.
Find the process id of app by:
lsof -i tcp:3000
Now u will get process id from this.
Run this:
kill -9 processId
I got:
Error: listen EADDRINUSE: address already in use :::8000
I was trying to look for the process listening to port 8000
and had no luck - there were none (sudo netstat -nlp | grep 8000 ).
It turned out I had app.listen(8000) written twice in my script.
My assumption is that the interference was happening only in a short time when trying to run the script, so looking for processes listening to the port before and after error didn't show any.
I have seen this error before (in node) with http.client, and as I recall, the problem had to do with not initializing the httpClient or setting bad options in the httpClient creation and/or in the url request.
Error: listen EADDRINUSE means the port which you want to assign/bind to your application server is already in use. You can either assign another port to your application.
Or if you want to assign the same port to the app. Then kill the application that is running at your desired port.
For a node application what you can try is, find the process id for the node app by :
ps -aux | grep node
After getting the process id, do
kill process_id
In my case Apache HTTP Server was run on port 80 I solved it by issue the command as root
sudo killall httpd
Update
If Jenkin is installed and running on your Mac;
You can check it with sudo lsof -i tcp:8080
If Yes, and You want to stop Jenkins only once, run: sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
I have the same problem too,and I simply close the terminal and open a new terminal and run
node server.js
again. that works for me, some time just need to wait for a few second till it work again.
But this works only on a developer machine instead of a server console..
On Debian i found out to run on port 80 you need to issue the command as root i.e
sudo node app.js
I hope it helps
Two servers can not listen on same port, so check out if other server listening on same port, also check out for browser sync if its running on same port
For other people on windows 10 with node as localhost and running on a port like 3500, not 80 ...
What does not work:
killall ? command not found
ps -aux | grep 'node' ? ps: user x unknown
What shows information but still not does work:
ps -aef | grep 'node'
ps ax
kill -9 61864
What does work:
Git Bash or Powershell on Windows
net -a -o | grep 3500 (whatever port you are looking for)
Notice the PID ( far right )
I could not get killall to work... so
Open your task manager
On processes tab , right click on Name or any column and select to include PID
Sort by PID, then right click on right PID and click end task.
Now after that not so fun exercise on windows, I realized I can use task manager and find the Node engine and just end it.
FYI , I was using Visual Studio Code to run Node on port 3500, and I use Git Bash shell inside VS code. I had exited gracefully with Ctrl + C , but sometimes this does not kill it. I don't want to change my port or reboot so this worked. Hopefully it helps others. Otherwise it is documentation for myself.
For windows users execute the following command in PowerShell window to kill all the node processes.
Stop-Process -processname node
The error EADDRINUSE (Address already in use) reports that there is already another process on the local system occupying that address / port.
There is a npm package called find-process which helps finding (and closing) the occupying process.
Here is a little demo code:
const find = require('find-process')
const PORT = 80
find('port', PORT)
.then((list) => {
console.log(`Port "${PORT}" is blocked. Killing blocking applications...`)
const processIds = list.map((item) => item.pid)
processIds.forEach((pid) => process.kill(pid, 10))
})
I prepared a small sample which can reproduce the EADDRINUSE error. If you launch the following program in two separate terminals, you will see that the first terminal will start a server (on port "3000") and the second terminal will close the already running server (because it blocks the execution of the second terminal, EADDRINUSE):
Minimal Working Example:
const find = require('find-process')
const http = require('http')
const PORT = 3000
// Handling exceptions
process.on('uncaughtException', (error) => {
if (error.code === 'EADDRINUSE') {
find('port', PORT)
.then((list) => {
const blockingApplication = list[0]
if (blockingApplication) {
console.log(`Port "${PORT}" is blocked by "${blockingApplication.name}".`)
console.log('Shutting down blocking application...')
process.kill(blockingApplication.pid)
// TODO: Restart server
}
})
}
})
// Starting server
const server = http.createServer((request, response) => {
response.writeHead(200, {'Content-Type': 'text/plain'})
response.write('Hello World!')
response.end()
})
server.listen(PORT, () => console.log(`Server running on port "${PORT}"...`))
I had the same issue recently.
It means that the port is already being used by another application (express or other software)
In my case, I had accidentally run express on 2 terminals, so exiting the terminal using 'Ctrl + C' fixed things for me. (Run server from only one terminal)
Hope it helps others.
Seems there is another Node ng serve process running. Check it by typing this in your console (Linux/Mac):
ps aux|grep node
and quit it with:
kill -9 <NodeProcessId>
OR alternativley use
ng serve --port <AnotherFreePortNumber>
to serve your project on a free port of you choice.

Node.js throws er Unhandled error event

I have installed node, npm in my Centos 6 server, and i am using putty for running commands at server.
Node is installed correctly at root and running awesome at anywhere at server.
my project is at /home/shaadise/public_html/Ikon
I have created a hello.js file /home/shaadise/public_html/Ikon
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8080);
console.log('Server started');
while running js:
root#vps [/home/shaadise/public_html/Ikon]# node hello.js
Server started
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at errnoException (net.js:904:11)
at Server._listen2 (net.js:1042:14)
at listen (net.js:1064:10)
at Server.listen (net.js:1138:5)
at Object.<anonymous> (/home/shaadise/public_html/Ikon/hello.js:6:4)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
root#vps [/home/shaadise/public_html/Ikon]# throw er; // Unhandled 'error' event
-bash: throw: command not found
-bash: //: is a directory
Question: where i have to put my node js file and how can i access it????
i tested to run command:
root#vps [/home/shaadise/public_html/Ikon]# netstat -plnt | grep ':8080'
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 27111/nginx
This Error: listen EADDRINUSE categorically means that either you or a daemon is running another application on 8080.
However, to check, try running on a different port?
-edit- as this is getting quite a few upvotes, I thought i'd add a bit of additional debug into it.
Pretty much all node.js tutorials default to port 8080 for running. This is because it is similar to the default port 80 used by other web services, such as Apache or NGinX.
In order to determine if another application is running on the same port, you can use netstat -a to see all active connections and their ports, and then grep that list to find any process connected on the same port as your Node.js application.
It doesn't really matter which port your Node application runs on, as long as it's a free port. Ultimately, when you deploy into production, you would sync up whatever content server you are using (Apache/NGinX) to use the same port.
A common situation to get this error is when one does the following:
startup something
use Ctrl+z and put it into background
try to startup something again
The good way to go would be always try to hit Ctrl+c first which sends signal to the application (which may decide to shutdown).
You can read more about it here:
What is the difference between Ctrl-z and Ctrl-c in the shell?
The server is running in background; it's happing, usually, when you don't kill the process.
To solve this you can put on the terminal:
ps | grep 'node'
This code will show you a process that have a specific number, use the next code to kill the process:
kill -9 "specific number"
You can use sudo if this doesn't work correctly.
If you are using Linux based system, first you have to list all the programs that are using that particular port and kill them(meaning stop them)
exemple: I want to list all programs that are using the 3000 port
fuser 3000/tcp
then pick the process ID, which is in the right side of the obtained line of text and issue the kill command
exemple : if have a process ID with the value of 2345 then the command will be
kill 2345
If closing the process which is using that port doesn't fix it , try the below solutions.
Installing the below package fixed it for me forever.
npm install ws#3.3.2 --save-dev --save-exact
Run this command in your terminal :
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
For Arch Linux add this line to /etc/sysctl.d/99-sysctl.conf:
fs.inotify.max_user_watches=524288
Then execute:
sysctl --system
https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details

Node.js app can't run on port 80 even though there's no other process blocking the port

I'm running an instance of Debian on Amazon EC2 with Node.js installed. If I run the code below:
http = require('http');
http.createServer(function (request, response){
response.writeHead(200, {'Content-Type':'text/plain'});
response.end('Hello World\n');
}).listen(80);
console.log("Running server at port 80");
I get the output below which tells me there's another process listening at port 80:
Running server at port 80
events.js:72
throw er; // Unhandled 'error' event
^
Error: listen EACCES
at errnoException (net.js:901:11)
at Server._listen2 (net.js:1020:19)
at listen (net.js:1061:10)
at Server.listen (net.js:1127:5)
at Object.<anonymous> (/home/admin/nodetests/nodetest.js:6:4)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
Now when I check to see if there's a process (as root in case anything is hidden) listening on port 80 using:
netstat -tupln
I get the below output, which tells me theres nothing listening at port 80:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1667/sshd
tcp6 0 0 :::22 :::* LISTEN 1667/sshd
I should note that the debian has port 80 open as an inbound rule if that makes a difference.
My question is: What am I doing wrong? How come I can't identify the process listening to port 80? Why is it blocked in Debian? What steps should I take to get the code running correctly?
The error code EACCES means you don't have proper permissions to run applications on that port. On Linux systems, any port below 1024 requires root access.
Instead of running on port 80 you can redirect port 80 to your application's port (>1024) using
iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
This will work if your application is running on port 3000.
Short answer: You can allow node access to that port using:
setcap 'cap_net_bind_service=+ep' /path/to/nodejs
long answer
Edit:
May not work on new node versions
Note that if you have apache running, you can create a reverse proxy on a vhost. If your node is running on port 8080:
<VirtualHost 127.0.0.1:80>
ServerName myLocalServer
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
</VirtualHost>
Of course, add server to /etc/hosts:
127.0.0.1 myLocalServer
You will need to enable the relevant apache modules:
sudo a2enmod proxy_html
sudo a2enmod proxy_http
sudo a2enmod proxy_connect
sudo a2enmod proxy_ajp
sudo service apache2 restart
...and now you can connect to http://myLocalServer.
For those looking for a quick and easy solution for a development environment, port forwarding via ssh can be a nice alternative:
ssh -L 80:localhost:3000 yourusername#localhost -N
This forwards port 80 on localhost to port 3000 on localhost.
It needs to be run as root (privileged port). To cancel it, simply hit ctrl-c in the terminal. (You can add the -f flag to have the command run in the background, but then you need to find it again to kill it).
This solution requires you to have an ssh server running locally. It can be done quickly, but please bear in mind the security implications if you are on a shared network. You might want to apply at least some level of additional security (disable password & root login).
I personally only ever use this on my local machine. I'm not sure how it affects the processing speed of your requests if you run this on production, maybe someone has an idea. Anyway, you would need to make sure this command keeps running all the time, which introduces more headaches. For production environments, I suggest using a reverse proxy like nginx.
the hexacyanide answer is right. but is there any solution to make this work?
the answer is yes.
how?
you can use a reverse proxy for example run a nginx reverse proxy on port 80 and pass the proxy to destination ip:port that node use it.
you can set this up using docker container that makes life even easier. this is the official build of nginx in docker hub that you can pull it.
there's even more benefits in using reverse proxy that you can google it.
I have got the same error and I tried running my application using sudo and it worked for me.
without sudo
mansi#mansi:~/NodePractice$ node myFirst.js
events.js:141
throw er; // Unhandled 'error' event
^
Error: listen EACCES 0.0.0.0:80
at Object.exports._errnoException (util.js:870:11)
at exports._exceptionWithHostPort (util.js:893:20)
at Server._listen2 (net.js:1224:19)
at listen (net.js:1273:10)
at Server.listen (net.js:1369:5)
at Object.<anonymous> (/home/mansi/NodePractice/myFirst.js:6:4)
at Module._compile (module.js:410:26)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
and with sudo
mansi#mansi:~/NodePractice$ sudo node myFirst.js
^C
The error code EACCES means you don't have proper permissions to run applications on that port.
On Linux systems, any port below 1024 requires root access.
Run the program with sudo permision.
Run sudo su command before running the program.

running shadowsocks-nodejs on heroku

What I am trying to accomplish: Get shadowsocks-node.js to run on heroku.
shadowsocks-nodejs is a lightweight tunnel proxy which can help you get through firewalls.
I got it to run locally with both processes on the same machine.
My next step was to deploy it to heroku and run server.js there and local.js locally on my machine. However, I can't seem to get a connection going.
My problem: the connections seem to be refused by the server process.
node local.js outputs:
calculating ciphers
server listening at port 1080
server connected
concurrent connections: 1
remote connection refused
server connected
concurrent connections: 1
remote connection refused
server connected
and so on...
server.js outputs (via heroku logs):
012-10-27T20:39:57+00:00 app[web.1]: server connected
2012-10-27T20:39:57+00:00 app[web.1]: concurrent connections: 1
2012-10-27T20:39:57+00:00 app[web.1]: server disconnected
2012-10-27T20:39:57+00:00 app[web.1]: concurrent connections: 0
2012-10-27T20:42:02+00:00 app[web.1]: server connected
2012-10-27T20:42:02+00:00 app[web.1]: concurrent connections: 1
2012-10-27T20:42:02+00:00 app[web.1]: server disconnected
and so on.
Chrome gives back the error:
Error 324 (net::ERR_EMPTY_RESPONSE): The server closed the connection without sending any data.
(makes sense)
This is my config.json that is used by shadowsocks:
{
"server":["https://damp-woodland-7539.herokuapp.com"],
"server_port":58954,
"local_port":1080,
"password":"barfoo!",
"timeout":60
}
I edited server.js to read (line 31):
//PORT = config.server_port;
PORT = process.env.PORT || 5000;
as advised for heroku apps.
And this is my package.json file:
{
"name": "shadowsocks-nodejs",
"scripts": {
"start": "server.js"
},
"version": "0.0.1",
"engines": {
"node": "0.8.x"
},
"dependencies": {
"fs": "*",
"net": "*"
}
}
This might be just a simple setup issue or some incorrect addresses. Would be great if someone of you could help me out.
Thanks a lot!
shadowsocks-nodejs is incompatible with Heroku. It's using raw sockets, while Heroku only provide HTTP access.
You can deploy shadowsocks-nodejs on a VPS with all the freedom of using raw sockets, or use shadowsocks-dotcloud if you want a free proxy.
EDIT:
The reason why there is no shadowsocks-heroku is that Heroku does not have websocket support.
Look this:
shadowsocks-heroku is a lightweight tunnel proxy which can help you get through firewalls. It is a port of shadowsocks, but through a different protocol.
shadowsocks-heroku uses WebSockets instead of raw sockets, so it can be deployed on heroku.
Notice that the protocol is INCOMPATIBLE with the origin shadowsocks.
https://github.com/mrluanma/shadowsocks-heroku

Categories

Resources