愚蠢的地球人

山寨了一个微信,叫做SnapChat

最近研究SnapDrop,发现它既可以发送文件又能发送文本消息,那岂不是可以把它改造成一个聊天APP?
但是,等等...为什么我要自己做一个聊天的APP,微信他不香吗?管他呢,耿哥出品,必属废品!先做了再说吧。微信也能传文件,为什么还会有人做SnapDrop这个东西呢。
有了这个想法,那就开始做吧。我首先想到的是直接利用它的WebRTC来做一个两人点对点互聊的东西。但是想了想,两个人有什么好聊的,人多才有意思,于是我决定做一个群聊工具。


做着做着问题出现了:基于WebRTC的这个点对点通道并不靠谱,并不是所有的客户端都能成功的建立点对点的连接。也就是说,你发出去的消息对方有一定的概率收不到,这样就很尴尬了。
好吧,使用WebRTC来做群聊的打算只能放弃了。我再仔细的研究一下SnapDrop的源码,发现它在跟服务器通讯的过程中采用了WebSocket协议来交换信息。
这个WebSocket协议是什么黑科技?
我们知道,传统的浏览器访问网站都是使用的Http协议。Http协议用来浏览个网页或者下载个文件什么的是没问题,但是用来做即时通讯就有点不好使了,因为它是单向的,所有的请求都要由客户端发起,服务器无法主动发送消息给客户端。如果要实现即时通信,需要每隔一定时间就由客户端发送一个请求用于获取新数据。如果这个时间间隔太长,就无法达到实时的目的,但是时间间隔如果设置的太短,又会导致资源的巨大浪费。因此,WebSocket协议就出现了,它是HTML5中新增的协议。它在浏览器和服务器之间提供了一个基于TCP连接的双向通道。有了WebSocket协议,服务器也能主动推送消息给客户端了。
有了这个神器,让消息通过服务器来转发岂不是就OK了。其实微信等即时聊天工具也是利用服务器转发的消息。这个SnapDrop的服务器端程序本身干的就是转发消息的活,稍加改造就能成为一个聊天工具的服务端程序,然后只需要再做一个客户端的聊天界面基本上就成了。
经过了大半个月的学习,没错,非专业码农,需要边学边做,终于东拼西凑出来了这个SnapChat应用,顺便我还保留了完整的SnapDrop的功能。


开发过程此处省略几万字...直接上源码链接吧:https://github.com/laukeng/snapchat
简单的介绍一下:
SnapChat是一个使用浏览器进行群聊的网页应用。无需下载安装三方应用,也无需注册,只要输入群聊名称和自己的昵称就能加入群聊。用户没有设置头像的功能,但是可以在昵称中使用Emoji表情来代替头像。由于没有用户认证,昵称可以随意设置,所以名字叫张三的人不一定就是张三。
关闭本页面会自动退出群聊,服务器只保留最近三天的聊天记录。点击删除图标可以删除自己发出的信息,群内所有在线的成员都会自动同步删除你所删掉的信息。你还可以发送指令"/del:all"来一次性删除自己发出的所有信息。
由于服务器性能限制,群聊中不支持发送图片和视频等多媒体文件。如需发送文件,可以在群成员列表页面中点击对方图标进行点对点传送。另外因受到浏览器兼容性和复杂的内网环境等因素,并非所有的群成员之间都能建立点对点的通讯,所以群成员列表中只显示已经建立起了点对点连接的用户。
程序源码遵循GPL3.0协议发布,本应用仅作学习和测试使用。请用户在聊天过程中自觉遵守所在国家或地区的相关法律法规。

应用访问地址:https://snapchat.fairysoft.net/

大镖客 评论于
回复
李某迪已经哭晕在看守所:我当时要是用这个,也不会落到今天这个下场😭
毛啊毛 评论于
回复
博主这是把snapdrop玩出花了。牛逼。
nac 评论于
回复
作者能不能吧图片发送的功能加入到最新源码里?
snapdrop 评论于
回复
怎么找已经存在的群聊啊?或者在哪里看已经存在的群聊并加入啊?
小鱼 评论于
回复
大佬,可以更新下支持发送图片的源码吗

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

友情链接

网站分类

最新留言

最近发表