因为公司的小妹研究了几周即时通讯技术无果。前天的会议上,我随口说“即时通讯有什么困难的,我一天估计就能研究出来。”然后就被小妹抓住了这句话,跟领导说:“即时通讯就交给小马了,我改去研究 iOS 了吧!”,并把我的 mac mini 夺走了。
但是昨天上 github 一搜,虽然能搜出许多解决方案,但是原理似乎都比较复杂,并不能让人短时间掌握并定制化业务。幸好昨天下午被安排做了别的事,于是忽悠过去了。今天我想,干脆自己用 jQuery 的 ajax 技术试试看吧。虽然肯定实现方法不会是最理想的,但是尽快做出雏形日后再完善好了。
我对前端的 jQuery 也不怎么了解,曾经买过一本电子书叫《 jQuery 开发权威指南》,但是代码在 Kindle 上的显示效果极差,也就改看小说没有学下去了。在深思熟虑后,我把所需要掌握的技术分为下面四个步骤,循序渐进地攻破它们:
1.实现按一个按钮在<div>中插入一个<p>
2.写一个显示时间的 php 文件,并每隔一秒读取这个 php 文件生成一个带有当前时间的<p>插入<div>
3.每隔一定时间读取数据库中未读信息放入<p>并插入<div>,再设信息为已读
4.做一个文本框和一个回复按钮,利用 ajax 技术插入数据库
刚刚做完后,扔新浪云,用手机和电脑浏览器各打开一个浏览器,果然能够互相发送信息了。感觉即使是自己设定的目标,一步步完成后,也是很有成就感的呢。
1
aegisho 2015-09-11 16:42:42 +08:00
可以用长连接代替轮询
|
2
scyuns 2015-09-11 16:42:57 +08:00 via Android
方向错了 你那个只能在小并发的时候玩玩
ajax + 定时器 取数据 属于入门级的 正确的是 web-socket 即时通讯 |
3
sun2920989 2015-09-11 16:44:59 +08:00
html5 貌似有了 WebSocket
|
4
feiyuanqiu 2015-09-11 16:45:46 +08:00
我还以为是做 RTC ,还想进来学习一下呢...
|
5
500miles 2015-09-11 16:46:23 +08:00 2
做回义工, 梳理一下过程吧....
"即时通讯有什么困难的, 我一天估计就能研究出来" 一天过去了.. 1, 写下 一个 div, 一个 button; 2, 每间隔 1 秒请求一次服务器, 目的 : 为了取得当前时间(非严格同步业务场景下)..你们自己想想吧 3, ajax polling 拉取消息 太他妈开心了, 今晚三碗饭 |
6
machinemxy OP |
7
frienmo 2015-09-11 16:48:46 +08:00
难道就我在等“我就是那个研究了几周即时通讯技术无果的小妹”?
|
8
Menng 2015-09-11 16:51:13 +08:00
Swoole 不错
|
9
learnshare 2015-09-11 16:52:05 +08:00
WebSocket 一下子就能把你乐歪了
|
13
sun2920989 2015-09-11 17:01:47 +08:00
@machinemxy 然而我也只知道名 并不会用 不过这个确实可以解决你这个问题
|
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 代码也只有几行 |
16
zqhong 2015-09-11 17:51:50 +08:00
用 WebSocket 搞过类似的,比轮询方便多了。
|
17
ChiangDi 2015-09-11 17:57:59 +08:00 via Android
你这个不叫即时通讯吧...
|
18
kifile 2015-09-11 18:06:36 +08:00
WEB-SOCKET 方便很多的,轮询始终有问题的
|
19
odirus 2015-09-11 18:11:54 +08:00
哎,千万级别的肿么破,要是一天做完,估计我也丢饭碗了。
|
20
iugo 2015-09-11 18:14:34 +08:00
@cloudzhou ws://iot.espressif.cn:9000/ 代码开源吗?
|
22
chairuosen 2015-09-11 18:31:23 +08:00
socket.io +1
你把官方 demo 搭好就完事了 |
24
cloudzhou 2015-09-11 19:00:25 +08:00
|
25
Smilecc 2015-09-11 19:45:16 +08:00
Workerman 倒也不错 很方便分发
|
26
iyaozhen 2015-09-11 20:03:58 +08:00
卧槽,我还以为我司做了 7 年的东西被你一天搞定了呢。你要是说是 web im 我还可以理解,算是做了个原始社会的产物。但你说「即时通讯」,这就呵呵了。
|
27
shoaly 2015-09-11 21:39:37 +08:00
搜一下 野狗 api, 别在重复开发轮子了...
何况你这个轮子 还是方的.... 自己想滚圆了 还有很长的路要走... |
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 也不行。那就不让他用了。 |
29
jugelizi 2015-09-11 22:50:11 +08:00
这让我想起那个蚂蚁路过一坨大象的便便时惊叹到这就是珠穆朗玛峰吧
|
31
1000copy 2015-09-11 23:31:35 +08:00
就我一人觉得小妹很果敢嘛。掐头去尾,略去无用内容,故事梗概为小妹抢走 mac mini 。
另外,楼主是一个快乐青年。不做程序员,未来不可限量。 |
32
machinemxy OP 感谢指点我方向的。其实我也知道自己的实现方法十分狗血,但是鉴于之前发的几个帖子都得到了广大坛友的热心帮助及讨论,于是想也发上来抛砖引玉一下。结果评论不乏冷嘲热讽的,心都碎了。😢😢😢
LZ 并非逗逼啊,只是这个方向真的没涉及到过而已。 |
33
lucky2touch 2015-09-12 12:03:34 +08:00 via iPhone
自己吹的牛 含泪也要写完哈哈
|
34
yetone 2015-09-12 12:07:54 +08:00
题主菜出了一定高度,在下佩服!
|
35
heylogo 2015-09-12 12:34:58 +08:00 via iPad
@machinemxy 现在在 V 站发帖一定要挨得了骂 我是见识过了 哈哈哈
|
36
machinemxy OP @heylogo 渐渐习惯了
|
37
w99wen 2015-09-12 15:11:13 +08:00
对啊。推荐 socket 长连接。轮询服务器也受不了啊。
如果是本地的一个程序和本地开的一个网页做交互。 可以用本地的程序开个 socket server ,占用 127.0.0.1 的一个端口,让网页自己连本地开的这个 server 就好了。如果是本地和 cs 结构的,那就直接 socket 连接服务器就好了。 我也是只是做过一个简单的。心跳的设置和消息重发什么的,这个还要你自己研究。 |