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

2015-09-11 16:35:24 +08:00
 machinemxy

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

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

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

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

4529 次点击
所在节点    jQuery
37 条回复
loading
2015-09-11 18:20:22 +08:00
看来我也用下 socket.io 吧,不然会被人吐槽~
chairuosen
2015-09-11 18:31:23 +08:00
socket.io +1
你把官方 demo 搭好就完事了
teannnn
2015-09-11 18:43:16 +08:00
@scyuns 谢谢指导,学习了
cloudzhou
2015-09-11 19:00:25 +08:00
@iugo websocket 有很多开源的实现,比如 socket.io ,我只是实现了一部分,并不会比现在开源系统好多少的。
Smilecc
2015-09-11 19:45:16 +08:00
Workerman 倒也不错 很方便分发
iyaozhen
2015-09-11 20:03:58 +08:00
卧槽,我还以为我司做了 7 年的东西被你一天搞定了呢。你要是说是 web im 我还可以理解,算是做了个原始社会的产物。但你说「即时通讯」,这就呵呵了。
shoaly
2015-09-11 21:39:37 +08:00
搜一下 野狗 api, 别在重复开发轮子了...
何况你这个轮子 还是方的.... 自己想滚圆了 还有很长的路要走...
hellogbk
2015-09-11 21:40:25 +08:00
因为我的程序里面也有利用 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
2015-09-11 22:50:11 +08:00
这让我想起那个蚂蚁路过一坨大象的便便时惊叹到这就是珠穆朗玛峰吧
pluson
2015-09-11 23:24:30 +08:00
1000copy
2015-09-11 23:31:35 +08:00
就我一人觉得小妹很果敢嘛。掐头去尾,略去无用内容,故事梗概为小妹抢走 mac mini 。

另外,楼主是一个快乐青年。不做程序员,未来不可限量。
machinemxy
2015-09-12 11:36:33 +08:00
感谢指点我方向的。其实我也知道自己的实现方法十分狗血,但是鉴于之前发的几个帖子都得到了广大坛友的热心帮助及讨论,于是想也发上来抛砖引玉一下。结果评论不乏冷嘲热讽的,心都碎了。😢😢😢
LZ 并非逗逼啊,只是这个方向真的没涉及到过而已。
lucky2touch
2015-09-12 12:03:34 +08:00
自己吹的牛 含泪也要写完哈哈
yetone
2015-09-12 12:07:54 +08:00
题主菜出了一定高度,在下佩服!
heylogo
2015-09-12 12:34:58 +08:00
@machinemxy 现在在 V 站发帖一定要挨得了骂 我是见识过了 哈哈哈
machinemxy
2015-09-12 14:59:59 +08:00
@heylogo 渐渐习惯了
w99wen
2015-09-12 15:11:13 +08:00
对啊。推荐 socket 长连接。轮询服务器也受不了啊。
如果是本地的一个程序和本地开的一个网页做交互。
可以用本地的程序开个 socket server ,占用 127.0.0.1 的一个端口,让网页自己连本地开的这个 server 就好了。如果是本地和 cs 结构的,那就直接 socket 连接服务器就好了。
我也是只是做过一个简单的。心跳的设置和消息重发什么的,这个还要你自己研究。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/219982

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX