如何在JavaScript/HTML中使用套接字?

85

如何在JavaScript/HTML中使用套接字?

也许可以使用一些很酷的HTML5功能?

库? 教程? 博客文章?


1
你想要做什么?你想要支持哪个浏览器? - James Black
我猜你指的是Web Sockets。 - o.k.w
你的意思是 TCP sockets 吗? - AlikElzin-kilaka
3个回答

79

如何在JavaScript/HTML中使用套接字?

JavaScript或HTML中没有使用通用套接字的功能。这将是一个安全灾难。

HTML5中有WebSocket。客户端部分相当简单:

socket= new WebSocket('ws://www.example.com:8000/somesocket');
socket.onopen= function() {
    socket.send('hello');
};
socket.onmessage= function(s) {
    alert('got reply '+s);
};

你需要在服务器端使用专门的套接字应用程序来接收连接并对其进行处理;这不是你通常会从Web服务器的脚本界面执行的操作。然而,它是一个相对简单的协议;我的Python SocketServer端点只有几页代码。
无论如何,它实际上还不存在。 JavaScript端规范和网络传输规范都没有确定下来,并且没有浏览器支持它。
但是,您可以在可用的情况下使用Flash为脚本提供备用,直到WebSocket得到广泛支持。 Gimite的web-socket-js是这样的一个免费示例。但是,您将受到与Flash Sockets相同的限制,即您的服务器必须能够根据套接字端口的请求输出跨域策略,并且您经常会遇到代理/防火墙问题。(Flash sockets是直接创建的;对于没有直接公共IP访问权限且只能通过HTTP代理退出网络的人,它们将无法工作。)
除非您确实需要低延迟的双向通信,否则最好现在坚持使用XMLHttpRequest

HTML5将支持哪些WS绑定? - Rella
如果你想知道浏览器中的WebSocket对象会是什么样子,那还有待观察,但规范(http://www.w3.org/TR/websockets/)最近没有太多变化。如果你说的WS绑定是指Web服务,那么就没有:WebSocket不会使用SOAP或任何其他预先存在的协议进行通信。 - bobince
1
你说: "JS或HTML中没有使用通用套接字的功能。对于其中的一些来说,这会是一个安全灾难。”但是像PhoneGap或与之相关的应用程序呢?HTML + JS不仅需要标准浏览器。 - obayhan

57

1
更新:bobince 在此页面上提供了一个简单的教程:P - o.k.w
3
是的,那个用户可能是Kaazing自己的Jonas Jacobi。他似乎随处出现在提到WebSocket的地方!但我并不完全了解Kaazing,它坐拥websocket.org网站,推广一种看起来是一个庞大且实际上并不免费的客户端和服务器解决方案,其中WebSocket支持似乎只是其功能中相对较小的一部分。我不知道,这可能是一个好的解决方案,但我对其营销方式并不完全满意。[已编辑,因此在okw的回复之后] - bobince

47

我认为现在这个问题已经超过1年了,需要提到的是,Socket.IO已经问世,并似乎成为了在浏览器中使用sockets的主要方式。据我所知,它也与Node.js兼容。


15
好的。已经快6年了,标准有变化吗? - Aaron Esau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接