All Projects → AscenX → Hey

AscenX / Hey

Licence: mit
An Simple IM App besed on Socket

Labels

Projects that are alternatives of or similar to Hey

Nettychat
基于Netty+TCP+Protobuf实现的Android IM库,包含Protobuf序列化、TCP拆包与粘包、长连接握手认证、心跳机制、断线重连机制、消息重发机制、读写超时机制、离线消息、线程池等功能。
Stars: ✭ 1,979 (+3858%)
Mutual labels:  im, socket
Easychatandroidclient
EasyChat是一个开源的社交类的App。主要包含消息、好友、群组等相关的IM核心功能。部分界面参照了QQ、微信等相关社交APP。EasyChat APP整体采用MVVM模式,基于JetPack(Lifecycle,LiveData,ViewModel,Room)构建
Stars: ✭ 64 (+28%)
Mutual labels:  im, socket
AndroidNetworkProgramming
Android网络编程实战总结,涉及HTTP、TCP、UDP常用协议。
Stars: ✭ 34 (-32%)
Mutual labels:  socket, im
T Io
解决其它网络框架没有解决的用户痛点,让天下没有难开发的网络程序
Stars: ✭ 1,331 (+2562%)
Mutual labels:  im, socket
fire-im
分布式IM服务,参考https://github.com/crossoverJie/cim 实现
Stars: ✭ 17 (-66%)
Mutual labels:  socket, im
Clientserverproject
一个C-S模版,该模版由三部分的程序组成,一个服务端运行的程序,一个客户端运行的程序,还有一个公共的组件,实现了基础的账户管理功能,版本控制,软件升级,公告管理,消息群发,共享文件上传下载,批量文件传送功能。具体的操作方法见演示就行。本项目的一个目标是:提供一个基础的中小型系统的C-S框架,客户端有三种模式,无缝集成访问,winform版本,wpf版本,asp.net mvc版本,方便企业进行中小型系统的二次开发和个人学习。同时网络组件方便的支持读写三菱和西门子PLC的数据,详细见Readme
Stars: ✭ 873 (+1646%)
Mutual labels:  socket
Godsharp.socket
An easy-to-use .NET socket server and client.
Stars: ✭ 35 (-30%)
Mutual labels:  socket
Angular Chat
(IM App)Chat App built using Angular and Socket.io
Stars: ✭ 12 (-76%)
Mutual labels:  im
Ios Chat
开源的即时通讯(野火IM)系统
Stars: ✭ 867 (+1634%)
Mutual labels:  im
Veza
IPC/TCP Networking Utility to connect several processes with great concurrency.
Stars: ✭ 45 (-10%)
Mutual labels:  socket
Connection Pool Client
💥 A simple multi-purpose connection pool client (Kafka & Hbase & Redis & RMDB & Socket & Http)
Stars: ✭ 40 (-20%)
Mutual labels:  socket
Goridge
High-performance PHP-to-Golang IPC bridge
Stars: ✭ 950 (+1800%)
Mutual labels:  socket
C10k Server
A toy asynchronous server, written in C++14 (WIP)
Stars: ✭ 14 (-72%)
Mutual labels:  socket
Qtalk
Startalk is a high-performace IM software for business. It has been stably used in Qunar for more than 4 years, providing services as well as consultation after and before sales to business. Startalk is applicable to multiple scenarios, such as office automation, business services, and first-party SDKs for IM scenes
Stars: ✭ 980 (+1860%)
Mutual labels:  im
Dodgem
A Simple Multiplayer Game, built with Mage Game Engine.
Stars: ✭ 12 (-76%)
Mutual labels:  socket
Mean Angular4 Chat App
MEAN stack with Angular 4 Chat App
Stars: ✭ 41 (-18%)
Mutual labels:  socket
Clusterws
💥 Lightweight, fast and powerful framework for building scalable WebSocket applications in Node.js
Stars: ✭ 868 (+1636%)
Mutual labels:  socket
Zeus
A high performance, cross-platform Internet Communication Engine. Developed with native socket API. Aim at handling millions of concurrent connections.
Stars: ✭ 30 (-40%)
Mutual labels:  socket
Progress Bot
High-tech weaponized moe progress delivery bot for IRC, Discord, and web
Stars: ✭ 38 (-24%)
Mutual labels:  socket
Peeplus
python+vue3前后端分离项目
Stars: ✭ 28 (-44%)
Mutual labels:  socket

Hey

这是我的毕业设计。 刚开始确定这个课题的时候是因为以前有稍微研究过一些XMPP协议,在这个基础上做起来应该不难。然后开始选技术的时候还有半年,我想为什么不从更底层做起呢!那就不用XMPP,当时接触过相关的即时通讯技术还有WebSocket,那为什么直接从更底层的Socket开始封装呢 服务端就用Go语言吧,用来做IM服务器和HTTP服务器都很好。

技术选型

既然是基于Socket,iOS端我并不准备中C语言的Socket开发封装起,而是使用一个第三方库CocoaAsyncSocket。XMPP的iOS framework也是从这个库开始封装。而Go语言的IM服务端则直接使用原生开发即可,无论是UDP还是TCP都已经封装的很好。

HTTP服务器使用的框架是Gin,已经相当成熟,可以用于大型服务端的开发了。

关于传输的数据格式,XMPP使用的是XML,但是体积太大,冗余过多不必要的数据,考虑了很久好像也没必要自己封装二进制的数据格式,我用的是Google的protocol buffer。HTTP服务器还是使用JSON。

我还需要存储客户端的IP地址,由于需要快速读写,我使用的是Redis

AccessToken验证方式使用的是JSON Web Token(JWT)

实现思路

我的想法是使用UDP Socket来传输数据,至于为什么使用UDP呢,一开始的想法是UDP比TCP快,虽然可能会丢包但是可以试着优化。关于使用UDP来做IM这个想法也被一些大神喷过,但是这都是我自己的想法,就这样做着先。

使用UDP会丢包,所以我想需要一个回执机制,接收端收到了消息后就给发送端发送一个回执,这个回执包括这条消息的ID,如果发送方过一段时间还没有接受到回执的时候则重新发送。而且这个回执还不能丢,所以我使用TCP来发送回执。

UDP是无连接性的,还是要使用TCP来连接服务端,表明登录状态。所以TCP的作用是连接和发送回执。

具体思路是当客户端登录和重新连接的时候,客户端使用UDP Socket绑定端口,然后使用TCP Socket来发送UDP 地址给服务端,服务端把用户的ID和UDP地址存进Redis,等发送方发送的消息包含接收端的用户ID,服务端再从Redis取出接收方的UDP地址进行转发。

发送图片我是这样实现的,我会把图片上传到七牛云,发图片的URL来发送,接收端只需要使用URL来加载图片即可

架构

关于整个APP的流程如下

关于iOS端,使用了MVVM设计模式结合RAC,在Controller里面只需要组合一下视图和布局,绑定数据即可,把处理数据和大部分逻辑都放在了ViewModel里面,结构还算清晰。

关于数据管理,我使用了一个Redux思想的全局数据调度中心,实现了单向数据流,数据的持久化等。数据持久化用到了FMDB。但是大部分代码是一个大神写的,很屌。

效果和下一步

目前实现传输文字和图片,好友添加还是在后台添加(前端还没做),动态模块等。

登录

通讯录

详细资料

个人资料

聊天界面

感谢一下开源技术

  • SDAutoLayout
  • YYWebImage
  • ReactiveObjC
  • AFNetworking
  • Protobuf
  • CocoaAsyncSocket
  • Qiniu
  • UICKeyChainStore
  • TZImagePickerController
  • SVProgressHUD
  • DateTools
  • MLEmojiLabel
  • MJRefresh
  • Mantle
  • FMDB
  • FMDBMigrationManager
  • MTLFMDBAdapter
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].