Reputation: 81
While connecting to REACT based WebSocket client to Java Jetty based Web Socket server, I am getting the error below -
WebSocket connection to 'ws://localhost:2319/ws' failed: Error during WebSocket handshake: Unexpected response code: 302
This error doesn't exist while connecting through Chrome's Smart Web Socket client.
I am trying to develop Web Socket Client based on REACT. Client code is -
var connection = new WebSocket('ws://localhost:2319/ws');
connection.onopen = function () {
// connection is opened and ready to use
};
WebSocket Server has been based on Jetty. Server code is -
server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(SSConstants.WWBSOCKET_PORT);
server.addConnector(connector);
// Setup the basic application "context" for this application at "/"
// This is also known as the handler tree (in jetty speak)
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/ws"); // Set to "/ws" for future integration with the main jetty server.
server.setHandler(context);
try {
// Initialize javax.websocket layer
ServerContainer wsContainer = WebSocketServerContainerInitializer.configureContext(context);
// Add WebSocket endpoint to javax.websocket layer
wsContainer.addEndpoint(WebsocketListener.class);
server.start();
}
catch (Throwable t) {
ssLogger.logInfo("Websocket Server start exp : ");
t.printStackTrace(System.err);
}
Output -
WebSocket connection to 'ws://localhost:2319/ws' failed: Error during WebSocket handshake: Unexpected response code: 302
Request URL:ws://localhost:2319/ws
Request Method:GET
Status Code:302 Found
Response Headers
view source
Content-Length:0
Date:Fri, 11 Aug 2017 18:51:42 GMT
Location:http://localhost:2319/ws/
Server:Jetty(9.3.8.v20160314)
Request Headers
view source
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:Upgrade
Host:localhost:2319
Origin:https://localhost:1338
Pragma:no-cache
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits
Sec-WebSocket-Key:2OZooIjOX7G6kgNpPOz9Fw==
Sec-WebSocket-Version:13
Upgrade:websocket
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36
Name
Upvotes: 8
Views: 28230
Reputation: 1
I recently faced the same issue and this is how I was able to resolve mine.
I changed the port number for my websocket server from 8080 to 8335 which was the same is the same port for my Apache server.
<?php
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
),
8335
);
$server->run();
And also made the same changes in my javascript code for the actual connection
let conn = new WebSocket('ws://localhost:8335');
conn.onopen = function(e) {
console.log("Connection established!");
conn.send('Hello Everyone');
};
conn.onmessage = function(e) {
console.log(e.data);
$("#msg").append('<br>'+e.data);
};
You can also lookup for free ports in the Apache controller by following the images below. Thanks
click on Netstart on the Xampp Controller
enter image description here
Click to refresh to view Active Socket, New Sockets and Old Sockets
Select any of the ports that falls in the burgundy section
Thank you
Upvotes: -1
Reputation: 49452
ws://localhost:2319/ws
is not the valid endpoint URL/URI, it wants to redirect to the correct one for your declared contextPath
of /ws
That's what the 302 redirect is telling you ...
Location: http://localhost:2319/ws/
Lets say your WebsocketListener
is declared as @ServerEndpoint("/ws")
, and we use your ServletContext
at contextPath
of "/ws"
that would mean your URL/URI to access that websocket endpoint is ...
ws://localhost:2319/ws/ws
Or said in a different way ...
ws://<host>:<port>/<contextPath>/<endpointPath>
Upvotes: 7