Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 418
Owen Avatar asked Nov 30 '22 01:11

Owen


2 Answers

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

like image 98
Owen Avatar answered Mar 06 '23 05:03

Owen


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.

like image 38
Tigertron Avatar answered Mar 06 '23 07:03

Tigertron