Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML5 Websocket only works on localhost

I followed the HTML5 Websocket tutorial of the website below:

http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/

It worked well, then I changed the host value from "localhost:8080" to "218.175.192.160:8080" (my ip) in client-side page, the server side still kept "localhost:8080".

It turns out that I can view the page in browser(apache) with http protocol, for example "http://218.175.192.160:8080/client.html", however, the socket in client-side can not connect to "ws://218.175.192.160:8080/daemon.php".(editted typo)

my questions are: 1. in client side, why does websocket only work on "ws://localhost:8080/daemon.php", not "ws://218.175.192.160:8080/daemon.php"?

2. why socket_bind( $socket, "127.0.0.1", 8080 ) works, but socket_bind( $socket, "218.175.192.160", 8080 ) occur error? the system reminds "unable to bind address [0]: The requested address is not valid in its context". I am sure that the Ip address belongs to my server.

Please help, Thank you.

I had found out the reason of the error: binding the wrong address, becasue i used router, even though i had set NAT service on router, but i forgot the address of "218.175.192.160" is belonging to the interface of router, not my server machine.

the address of server machine should be the local address type, for example: "192.168.1.2", which is really on the lan card interface.

sorry that i forgot the basic network setting :( , hope this post helps the network newbie like me, thx~ :)

like image 906
ssac Avatar asked Aug 15 '10 19:08

ssac


People also ask

Does WebSocket work on localhost?

It works for localhost because localhost points to your individual computer and not your router. Save this answer.

Is WebSocket part of html5?

WebSockets is a next-generation bidirectional communication technology for web applications which operates over a single socket and is exposed via a JavaScript interface in HTML 5 compliant browsers.

Does WebSocket require web server?

The WebSocket protocol enables interaction between a web browser (or other client application) and a web server with lower overhead than half-duplex alternatives such as HTTP polling, facilitating real-time data transfer from and to the server.

Why WebSockets are not reliable?

It has built-in means of detecting transmission errors or packet corruption and attempting retransmissions in those cases, but delivery can still fail. It guarantees that if the packet is not delivered, the caller will get an error so the caller can know. Since websocket is built on top of TCP, it has the same issue.


1 Answers

I believe the same origin policy applies to both websockets and server ports, so both client and server have to match or else the connection will fail.

In your example, you used:

http://218.175.192.160:8080/client.html
ws://218.175.192.160/daemon.php

I'm not sure if it was just a typo, but this would need to be

http://218.175.192.160:8080/client.html
ws://218.175.192.160:8080/daemon.php
like image 140
Arne Roomann-Kurrik Avatar answered Sep 25 '22 01:09

Arne Roomann-Kurrik