Firefly开源社区

标题: 【GoFast】7.最有意思的 - WebSocket [打印本页]

作者: tjCFeng    时间: 2015-8-15 14:05
标题: 【GoFast】7.最有意思的 - WebSocket
本帖最后由 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的类,创建方法完全一样:初始化+三个事件






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


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

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


作者: lichundong    时间: 2016-7-11 10:21
谢谢分享!!!
作者: zhouwj7    时间: 2017-11-6 13:48
不错,想问下那个访问端口是怎么实现的呢?
作者: tjCFeng    时间: 2017-11-9 09:11
zhouwj7 发表于 2017-11-6 13:48
不错,想问下那个访问端口是怎么实现的呢?

访问端口其实就是通过js代码,让浏览器创建一个Socket Client连接到自己开发的Server上,然后就可以互相通讯了。JS不需要做什么太多的工作,只要创建类发起连接的请求。如果自己做Server,比普通的SocketServer多做的东西就是握手信息,看一下WebSocket协议就明白了。
作者: land880    时间: 2018-1-19 00:48
@不错,想问下那个访问端口是怎么实现的呢?
同问
作者: zongyuhai    时间: 2018-12-22 19:59
谢谢
作者: diaodiao    时间: 2020-4-14 15:05
谢谢
作者: admin1155    时间: 2022-1-26 20:39
看看




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1