查看: 1014|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2022-9-16 05:52
  • 签到天数: 1368 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-9-30 11:30:44 | 显示全部楼层 |阅读模式
    分享到:
    一般服务器在展示数据的情况时,采用的是一种叫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多个浏览器的连接,并实时发送数据,而不再需要去循环刷新了。
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 01:48 , Processed in 0.117899 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.