Randy Song
Randy Song

Reputation: 583

React Native Websocket Android not connecting to server

I'm trying to use React Native's built in Websocket support. I have this code:

var hostname = "192.168.X.XXX";
var port = "4567";
const webSocket = new WebSocket("ws://" + hostname + ":" + port + "/chat");

and I have this:

  componentWillMount: function(){

    console.log("MOUNTING CHAT COMPONENT");
    webSocket.onopen = function(){ 
      console.log("binding to chat room");
      bindToChatRoom(); 
      setTimeout(keepWebSocketOpen, 30000); 
      ws_connected = true; 
    };

    webSocket.onmessage = function (msg) {
      this.handleMsg(msg); 
    };

    webSocket.onclose = function () {
      console.log("WebSocket connection closed"); 
      ws_connected = false; 
    };

    webSocket.onerror = function (e){
      //add some error handling -> DO THIS
      console.log(e.message);
    };
  },

I'm running a local server using sparkjava, with this:

    webSocket("/chat", ChatWebSocketHandler.class);

etc. I've tested the server, and I can connect to it (and send messages) both through both my web browser on my laptop AND on my phone with URL 192.168.x.xxx:4567/chat . However, when I run the react native app, I never see the console message "binding to chat room". Am I missing something? How come this websocket never opens?

Just want to note, I also tried connecting here: ws://echo.websocket.org

which is described here: http://www.websocket.org/echo.html

This is a known working websocket, so I know it's purely a react native issue...

Upvotes: 1

Views: 7901

Answers (1)

Randy Song
Randy Song

Reputation: 583

Turns out that I had the line of code

const webSocket = new WebSocket("ws://echo.websocket.org");

in the wrong place. If you move it into componentWillMount, it works just fine.

Upvotes: 1

Related Questions