Owen
Owen

Reputation: 430

Websocket server running fine but cannot connect from client (what url should I use?)

OK this is very simple to anyone who's used websocket and nodejs. I have created a websocket server named ws_server.js and put it in C:\Program Files (x86)\nodejs where I have installed the nodejs framework. I started the server and it is running and it says it's listening on port 8080. So far so good, I have the server running.

Now I simply want to connect to it from client code so that I can do all that lovely stuff about capturing events using event listeners etc. The problem is, embarassingly, I cannot figure out what URL to use to connect to my websocket server.

function init() { 
    testWebSocket(); 
}  

function testWebSocket() { 
    websocket = new WebSocket("ws://localhost:8080/"); // WHAT URL SHOULD BE USED HERE? 
    websocket.onopen = function(evt) { alert("OPEN") }; 

    websocket.onclose = function(evt) { alert("CLOSE") }; 
    websocket.onmessage = function(evt) { alert("MESSAGE") }; 
    websocket.onerror = function(evt) { alert("ERROR") }; 
}  

function doSend(message) { 
    // this would be called by user pressing a button somewhere
    websocket.send(message); 
    alert("SENT");
}  

window.addEventListener("load", init, false);  

When I use ws://localhost:8080 the only events that trigger are CLOSE and ERROR. I cannot get the client to connect. I must be missing something very simple. Do I need to set up my nodejs folder in IIS for example and then use that as the URL?

Just to reiterate, the websocket server is running fine, I just don't know what URL to use to connect to it from the client.

EDIT: The websocket server reports the following error. Specified protocol was not requested by the client.

Upvotes: 6

Views: 29849

Answers (4)

Eliezer Miron
Eliezer Miron

Reputation: 408

For me, the solution was to change the URL from ws:// to wss://. This is because the server I was connecting to had updated its security, and now only accepted wss.

Upvotes: 0

justadev
justadev

Reputation: 1516

I just wanted to share a crazy issue that I had. I was able to connect to a websocket of an old version of a 3rd party app in one computer, but not to a newer version of the app in another.

Moreever, even in new computer with the new version of the app, The app was able to connect to the websocket, but no matter what I did, when I tried to connect with my own code, I kept getting the error message that the websocket connection failed

Long story short, They changed an apache configuration that allowed connecting to the websocket via a proxy.

In the old version, apache config was:

ProxyPass /socket/ ws://localhost:33015/ retry=10
ProxyPass /socket ws://localhost:33015/ retry=10

In the new version, apache config was changed to:

ProxyPass /socket/ ws://localhost:33015/ retry=10

By bad luck, I was trying to connect to ws://localhost/socket and not to ws://localhost/socket/. As a result, proxy was not found, and connection returned an error.

Moral of the story: Make sure that you are trying to connect to a websocket url that exists.

Upvotes: 1

Tigertron
Tigertron

Reputation: 638

I was seeing the same error, the entire web server goes down. Adding the protocol fixes it but leaves me wondering why it was implemented this way. I mean, one bad request should not bring down your server.

You definitely have to encase it a try/catch, but the example code provided here https://www.npmjs.com/package/websocket (2019-08-07) does not. This issue can be easily avoided.

Upvotes: 3

Owen
Owen

Reputation: 430

I think I have got it working by doing the following.

var websocket = new WebSocket("ws://localhost:8080/","echo-protocol");

The problem being that I needed to specify a protocol. At least now I get the onopen event. ...if nothing much else

Upvotes: 17

Related Questions