V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
machinemxy
V2EX  ›  jQuery

顺利完成了自定任务,十分愉快

  •  
  •   machinemxy · 2015-09-11 16:35:24 +08:00 · 4520 次点击
    这是一个创建于 3359 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为公司的小妹研究了几周即时通讯技术无果。前天的会议上,我随口说“即时通讯有什么困难的,我一天估计就能研究出来。”然后就被小妹抓住了这句话,跟领导说:“即时通讯就交给小马了,我改去研究 iOS 了吧!”,并把我的 mac mini 夺走了。

    但是昨天上 github 一搜,虽然能搜出许多解决方案,但是原理似乎都比较复杂,并不能让人短时间掌握并定制化业务。幸好昨天下午被安排做了别的事,于是忽悠过去了。今天我想,干脆自己用 jQuery 的 ajax 技术试试看吧。虽然肯定实现方法不会是最理想的,但是尽快做出雏形日后再完善好了。

    我对前端的 jQuery 也不怎么了解,曾经买过一本电子书叫《 jQuery 开发权威指南》,但是代码在 Kindle 上的显示效果极差,也就改看小说没有学下去了。在深思熟虑后,我把所需要掌握的技术分为下面四个步骤,循序渐进地攻破它们:
    1.实现按一个按钮在<div>中插入一个<p>
    2.写一个显示时间的 php 文件,并每隔一秒读取这个 php 文件生成一个带有当前时间的<p>插入<div>
    3.每隔一定时间读取数据库中未读信息放入<p>并插入<div>,再设信息为已读
    4.做一个文本框和一个回复按钮,利用 ajax 技术插入数据库

    刚刚做完后,扔新浪云,用手机和电脑浏览器各打开一个浏览器,果然能够互相发送信息了。感觉即使是自己设定的目标,一步步完成后,也是很有成就感的呢。

    aegisho
        1
    aegisho  
       2015-09-11 16:42:42 +08:00
    可以用长连接代替轮询
    scyuns
        2
    scyuns  
       2015-09-11 16:42:57 +08:00 via Android
    方向错了 你那个只能在小并发的时候玩玩

    ajax + 定时器 取数据 属于入门级的

    正确的是 web-socket 即时通讯
    sun2920989
        3
    sun2920989  
       2015-09-11 16:44:59 +08:00
    html5 貌似有了 WebSocket
    feiyuanqiu
        4
    feiyuanqiu  
       2015-09-11 16:45:46 +08:00
    我还以为是做 RTC ,还想进来学习一下呢...
    500miles
        5
    500miles  
       2015-09-11 16:46:23 +08:00   ❤️ 2
    做回义工, 梳理一下过程吧....

    "即时通讯有什么困难的, 我一天估计就能研究出来"

    一天过去了..

    1, 写下 一个 div, 一个 button;
    2, 每间隔 1 秒请求一次服务器, 目的 : 为了取得当前时间(非严格同步业务场景下)..你们自己想想吧
    3, ajax polling 拉取消息


    太他妈开心了, 今晚三碗饭
    machinemxy
        6
    machinemxy  
    OP
       2015-09-11 16:46:32 +08:00
    @scyuns
    @sun2920989
    所言极是。所以这是我今后的研究方向了~
    frienmo
        7
    frienmo  
       2015-09-11 16:48:46 +08:00
    难道就我在等“我就是那个研究了几周即时通讯技术无果的小妹”?
    Menng
        8
    Menng  
       2015-09-11 16:51:13 +08:00
    Swoole 不错
    learnshare
        9
    learnshare  
       2015-09-11 16:52:05 +08:00
    WebSocket 一下子就能把你乐歪了
    500miles
        10
    500miles  
       2015-09-11 16:52:36 +08:00
    我就是那个研究了几周即时通讯技术无果的小妹 ,


    @frienmo 你等我干啥咧 (手动抠鼻..)
    Niphor
        11
    Niphor  
       2015-09-11 16:59:29 +08:00
    又开撕了吗? 开启周末模式,瓜子果盘准备...

    @500miles
    shiny
        12
    shiny  
       2015-09-11 17:00:51 +08:00
    sun2920989
        13
    sun2920989  
       2015-09-11 17:01:47 +08:00
    @machinemxy 然而我也只知道名 并不会用 不过这个确实可以解决你这个问题
    gamexg
        14
    gamexg  
       2015-09-11 17:31:35 +08:00 via Android
    cloudzhou
        15
    cloudzhou  
       2015-09-11 17:49:12 +08:00   ❤️ 1
    你可以测试一个简单的 websocket 例子,及时推送温度:
    1 打开 http://iot.espressif.cn/static/html/temperature-via-websocket.html
    2 open a Terminal:
    > curl -H 'Authorization: token 76232af1777d6dc5f6da6fe7d75794ebf87ccd3e' -d '{"datapoint": {"x": 17}}' http://iot.espressif.cn/v1/datastreams/tem_hum/datapoint

    see what happened

    代码也只有几行
    zqhong
        16
    zqhong  
       2015-09-11 17:51:50 +08:00
    用 WebSocket 搞过类似的,比轮询方便多了。
    ChiangDi
        17
    ChiangDi  
       2015-09-11 17:57:59 +08:00 via Android
    你这个不叫即时通讯吧...
    kifile
        18
    kifile  
       2015-09-11 18:06:36 +08:00
    WEB-SOCKET 方便很多的,轮询始终有问题的
    odirus
        19
    odirus  
       2015-09-11 18:11:54 +08:00
    哎,千万级别的肿么破,要是一天做完,估计我也丢饭碗了。
    iugo
        20
    iugo  
       2015-09-11 18:14:34 +08:00
    @cloudzhou ws://iot.espressif.cn:9000/ 代码开源吗?
    loading
        21
    loading  
       2015-09-11 18:20:22 +08:00 via iPhone
    看来我也用下 socket.io 吧,不然会被人吐槽~
    chairuosen
        22
    chairuosen  
       2015-09-11 18:31:23 +08:00
    socket.io +1
    你把官方 demo 搭好就完事了
    teannnn
        23
    teannnn  
       2015-09-11 18:43:16 +08:00 via iPhone
    @scyuns 谢谢指导,学习了
    cloudzhou
        24
    cloudzhou  
       2015-09-11 19:00:25 +08:00
    @iugo websocket 有很多开源的实现,比如 socket.io ,我只是实现了一部分,并不会比现在开源系统好多少的。
    Smilecc
        25
    Smilecc  
       2015-09-11 19:45:16 +08:00
    Workerman 倒也不错 很方便分发
    iyaozhen
        26
    iyaozhen  
       2015-09-11 20:03:58 +08:00
    卧槽,我还以为我司做了 7 年的东西被你一天搞定了呢。你要是说是 web im 我还可以理解,算是做了个原始社会的产物。但你说「即时通讯」,这就呵呵了。
    shoaly
        27
    shoaly  
       2015-09-11 21:39:37 +08:00
    搜一下 野狗 api, 别在重复开发轮子了...
    何况你这个轮子 还是方的.... 自己想滚圆了 还有很长的路要走...
    hellogbk
        28
    hellogbk  
       2015-09-11 21:40:25 +08:00   ❤️ 1
    因为我的程序里面也有利用 websocket 实现的即时聊天的功能,所以就我的经验来看,使用 websocket 时需要注意:
    1. 如果你要兼容 IE 的话, IE 版本太低是不支持 WEBSOCKET 的,解决方法是可以用 flash 模拟 WEBSOCKET ,有现成的开源项目可以用。但是如果连 FLASH 都不支持的话,那就没办法了。

    2. 浏览器支持 WEBSOCKET ,但是用户所处的网络环境不支持,使得 WEBSOCKET 连接无法连上。 遇到这种情况,一般用 SECURE WEBSOCKET 可以解决。 但是如果 SECURE WEBSOCKET 也无法解决。那就没有办法了。。

    3. WEBSOCKET 虽然可以连上,但是因为网络环境的问题,总是不停地断开。 每几秒就断开一次。

    4. 做好 fallback ,比如 iframe long polling (也受网络环境限制),甚至 ajax 轮循。

    我的项目里面目前用到的方法是先检测浏览器是否支持 Websocket ,如果支持,则利用 Websocket 连接一个测试的地址,如果通过测试 ,决定使用 Websocket ,如果没有通过,则检测 iframe long polling 是否可用,如果 long polling 也不行。那就不让他用了。
    jugelizi
        29
    jugelizi  
       2015-09-11 22:50:11 +08:00
    这让我想起那个蚂蚁路过一坨大象的便便时惊叹到这就是珠穆朗玛峰吧
    pluson
        30
    pluson  
       2015-09-11 23:24:30 +08:00 via Android
    1000copy
        31
    1000copy  
       2015-09-11 23:31:35 +08:00
    就我一人觉得小妹很果敢嘛。掐头去尾,略去无用内容,故事梗概为小妹抢走 mac mini 。

    另外,楼主是一个快乐青年。不做程序员,未来不可限量。
    machinemxy
        32
    machinemxy  
    OP
       2015-09-12 11:36:33 +08:00
    感谢指点我方向的。其实我也知道自己的实现方法十分狗血,但是鉴于之前发的几个帖子都得到了广大坛友的热心帮助及讨论,于是想也发上来抛砖引玉一下。结果评论不乏冷嘲热讽的,心都碎了。😢😢😢
    LZ 并非逗逼啊,只是这个方向真的没涉及到过而已。
    lucky2touch
        33
    lucky2touch  
       2015-09-12 12:03:34 +08:00 via iPhone
    自己吹的牛 含泪也要写完哈哈
    yetone
        34
    yetone  
       2015-09-12 12:07:54 +08:00
    题主菜出了一定高度,在下佩服!
    heylogo
        35
    heylogo  
       2015-09-12 12:34:58 +08:00 via iPad
    @machinemxy 现在在 V 站发帖一定要挨得了骂 我是见识过了 哈哈哈
    machinemxy
        36
    machinemxy  
    OP
       2015-09-12 14:59:59 +08:00
    @heylogo 渐渐习惯了
    w99wen
        37
    w99wen  
       2015-09-12 15:11:13 +08:00
    对啊。推荐 socket 长连接。轮询服务器也受不了啊。
    如果是本地的一个程序和本地开的一个网页做交互。
    可以用本地的程序开个 socket server ,占用 127.0.0.1 的一个端口,让网页自己连本地开的这个 server 就好了。如果是本地和 cs 结构的,那就直接 socket 连接服务器就好了。
    我也是只是做过一个简单的。心跳的设置和消息重发什么的,这个还要你自己研究。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2863 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:49 · PVG 22:49 · LAX 06:49 · JFK 09:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.