Firefly开源社区

【GoFast】7.最有意思的 - WebSocket

646

积分

23

威望

20

贡献

技术大神

Rank: 3Rank: 3

积分
646

突出贡献

发表于 2015-8-15 14:05:10     
本帖最后由 tjCFeng 于 2015-8-15 14:05 编辑

    一般服务器在展示数据的情况时,采用的是一种叫Ajax的方法。它不是一个新技术,而是多种现有方法的集合体。简单来说,为了在Web页面上实时(所谓的实时)更新数据,Web页面会定时的到服务器上请求数据,当判断显示的数据和获取到的数据不一样时,只刷新局部的页面而不是整页重新刷新,这样给用户的感觉就是我看到的数据变化了,而且我没有手动刷新页面。此方法可以说解决了显示的问题,但是并没有从根本上解决服务器查询的压力,尤其是对实时数据来说,所以根据需求来决定是否使用。    记得在2009年,由于实在不喜欢这种方法,使用Flash插件的方式做了一个真正的Web实时显示程序。由Web页面加载Flash程序,Flash程序发起Socket连接,等待数据的到达,然后再返回给Web页面进行刷新。果然成功,压力减小了很多。
    然而就在我沾沾自喜时,技术却在飞速的发展,其中一个革命性的更新 -- HTML5出现了。HTML5只是简单的HTML4的更新吗?不,它的出现带来大量的新技术,其中我最看重的一个就是WebSocket,可以由Web页面调用API,由浏览器发起Socket连接。其实原理和Flash的一样,只是HTML5统一了标准,这样大家都可以来按照统一的方法使用了。
    此时的WebSocket还是草案,可以说是一月一更新,从单Key+时间到单Key变双Key,直到现在的单Key+SHA1+MD5才算定型。而那时我用Delphi跟着草案一边一边的实现,盼望着正式版的到来。

    反过头来再来看看Golang实现的WebSocket。因为WebSocket的Client端是由浏览器来完成的,所以这个库中是不包括Client的,要做的只是Server,对浏览器请求的回复。由于这个WebSocket本质就是TCP,所以继承自TCP的类,创建方法完全一样:初始化+三个事件
1.png


2.png


    而在这次的例子中多了一个文件,就是那个客户端的HTML文件,WebSocketTest.html。
3.png

    里面的JavaScript代码太长了,就不贴出来了。
    整体功能就是,HTML发起WS连接请求,WebSocketServer处理请求,返回握手信息。HTML收到后认为通道已经建立,可以发送数据给Server,或者等待Server数据的到达,再呈现给用户。这个例子是HTML发送字符串,服务器做回显。

    因为WebSocketServer继承于TCPServer,所以它也可以同时接受15000多个浏览器的连接,并实时发送数据,而不再需要去循环刷新了。

回复

使用道具 举报

131

积分

0

威望

0

贡献

技术小白

积分
131
发表于 2016-7-11 10:21:15     
谢谢分享!!!
回复

使用道具 举报

14

积分

0

威望

0

贡献

游客

积分
14
发表于 2017-11-6 13:48:56     
不错,想问下那个访问端口是怎么实现的呢?
回复

使用道具 举报

646

积分

23

威望

20

贡献

技术大神

Rank: 3Rank: 3

积分
646

突出贡献

发表于 2017-11-9 09:11:17     
zhouwj7 发表于 2017-11-6 13:48
不错,想问下那个访问端口是怎么实现的呢?

访问端口其实就是通过js代码,让浏览器创建一个Socket Client连接到自己开发的Server上,然后就可以互相通讯了。JS不需要做什么太多的工作,只要创建类发起连接的请求。如果自己做Server,比普通的SocketServer多做的东西就是握手信息,看一下WebSocket协议就明白了。
回复

使用道具 举报

8

积分

0

威望

0

贡献

游客

积分
8
发表于 2018-1-19 00:48:09     
@不错,想问下那个访问端口是怎么实现的呢?
同问
回复

使用道具 举报

9

积分

0

威望

0

贡献

技术小白

积分
9
发表于 2018-12-22 19:59:53     
谢谢
回复

使用道具 举报

*滑块验证:

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表