Ĭ��
���� �������� 30
�뿪��IM������Ʒ�¿ӣ�����3���¹����ҿ�Դ����ߣ������������·��... ��վ�����㽨��
������ϵʵ�ʣ�һ�׵��͵�IMͨ��Э����������
΢��ɨһɨ��ע��

ǰ��


����Ҫ̸��IMͨ��Э��ָ����Ӧ�ò�ͨ�š����ԡ�������ָ������Э�飨��TCP��UDP����IMͨ��Э�����ƶ���IM���������㣬Ҳ�ǹᴩ���ơ���������άʼ�յĺ������ڣ�ͨ��Э�����Ƶĺû���ֱ��Ӱ���������ڵ��û����飨�����������ĵ�����ͨ���ٶȣ��������ԣ����ϰ汾���޷��ںϣ�����չ�ԣ������İ汾������ô�죩�ȣ��Ǹ������Ҽ�����Ҫ�Ĺ���֮һ��

���Ľ���������ϵʵ�ʵķ�ʽ����ϸ����һ�׵���IM��ͨ��Э�����Ƶķ������档

����ԭ������58ͬ�������򽣣�58ͬ�Ǽ���ίԱ����ϯ���߼��ܹ�ʦ�����㽲ʦ��ǰ�ٶ�hi�Ŷӳ�Ա��������58ͬ��imϵͳ�ļܹ����ơ�

IMͨ��Э���ķֲ�����


��ν��Э�顱��˫����ͬ���صĹ��������磺����Э�飬ͣսЭ�顣

Э�����﷨�����塢ʱ����Ҫ�أ�

  • ��1���﷨����������������Ϣ�Ľṹ����ʽ
  • ��2�����壺����Ҫ�������ֿ�����Ϣ�����ɺ��ֶ����Լ�����������Ӧ
  • ��3��ʱ�򣺼��¼�ʵ��˳������ϸ˵��

һ�׵��͵�IMͨ��Э�����Ʒ�Ϊ���㣺Ӧ�ò㡢��ȫ�㡢�����㡣

������ϵʵ�ʣ�һ�׵��͵�IMͨ��Э����������_b.jpeg

IMӦ�ò�Э������


Ӧ�ò�Э��ѡ�ͣ������������֣��ı�Э�顢������Э�顢��ʽXMLЭ�顣

1�ı�Э��


�ı�Э����ָ �����������������Ա����ͨѶ����Э�飬���͵�Э����httpЭ�顣һ��httpЭ�����³���������
GET / HTTP/1.1
User-Agent: curl
Host: musicml.net
Accept: */*

�ı�Э�����ص��ǣ�

  • a. �ɶ��Ժã����ڵ���
  • b. ��չ��Ҳ�ã�ͨ��key:value��չ��
  • c. ����Ч��һ�㣨һ��һ�ж��룬����ð�ŷָ����key��value��
  • d. �Զ����Ƶ�֧�ֲ��� ��������������Ƶ

IM�У�MSNʹ�õ����ı�Э�顣


2��������


������Э����ָbinaryЭ�飬������ipЭ�飬������ipЭ����һ��ͼʾ��

������ϵʵ�ʣ�һ�׵��͵�IMͨ��Э����������_a.jpeg

������Э��һ�㶨����ͷ�Ϳ���չ�䳤���� ��ÿ���ֶι̶��˺��� ������IPЭ����ǰ4��bit��ʾЭ���汾�� ��Version�����������μ���TCP/IP���⡷��3������

������Э��������һЩ�ص㣺

  • a. �ɶ��Բ���ڵ���
  • b. ��չ�Բ��� ������Ҫ��չ�ֶΣ��ɰ�Э���Ͳ������ˣ�����һ������ʱ����һ��Version�ֶ�
  • c. ����Ч�ʳ��ߣ�����û�н������ۣ�
  • d. �Զ����Ƶ�֧�ֲ��� ��������������Ƶ

IM�У�QQʹ�õ�ʱ������Э�顣


3��ʽXMLЭ��


IM��׼��׼Э��xmpp����ʹ����ʽXML����gtalk��У��ͨ��Щim���ǻ���xmpp�ġ�����������һ��xmppЭ�������ӣ�
<message
to=��[url=mailto:[email protected]][email protected][/url]��
from=��[url=mailto:[email protected]][email protected][/url]��
type=��chat��
xml : lang=��en��>
<body>Wherefore art thou, Romeo?</body>
</message>

��xml��ǩ�д��¿����ж�����һ��romeo����juliet��������Ϣ��xmppЭ������ʵ�ֿ����Ļ�ͨ������gtalk��У��ͨ�û����졣ֻҪ������ʵ����s2s������server to server�� ���������ڵ�im����û�л�ͨ���� ������������������û����ʵ�֡�

XMPPЭ���м����ص㣺

  • a.����׼��׼Э�飬���Կ�����ͨ
  • b.XML���ŵ㣬�ɶ��Ժã���չ�Ժ�
  • c.�������۳��ߣ�dom������
  • d.��Ч���ݴ����ʳ��ͣ������ı�ǩ��

��������������ǿ�Ҳ�����ʹ��xmpp���ر������߶�im������Ҫ�ã�һ��Ҫ�Լ���ѹ�� �����������������ù�xmpp��ͬѧ����������һ����¼����Ҫ���ٽ�����Ҫ�˷Ѷ�����������

4ʵ�ʵ�����


��������һ��imЭ����ʵ������ ��һ�㳣���������ǣ����������ư�ͷ������չ�䳤���塣��������ʹ�����ı���XML����չ�Ժõ�Э�顣��ͷ���������ͽ���Ч�ʣ���ҵ���޹ء����屣֤��չ�ԣ���ҵ�����ء�

����һ��ʵ�ʵ�16�ֽ�im�����ƶ�����ͷ��
//sizeof(cs_essay-header)=16
struct cs_essay-header
{
    uint32_t version;
    uint32_t magic_num;
    uint32_t cmd;
    uint32_t len;
    uint8_t data[];
}__attribute__((packed));

- a. ǰ4���ֽ���version��
- b. ��������4���ֽ��Ǹ���ħ�����֣�magic_num������������֤���ݴ�λ�򶪰����⣬�����������ǣ���ͷ�ż���Լ���õ������ַ�����β�ż���Լ���õ������ַ� Լ���ã���������Э�飬ij�����ֽ�λ�ã���0x 01020304 �������������ģ�
- c. ��������command�������ţ�������������keepalive���ġ�ҵ�����ġ���Կ�������ĵȣ�
- d. len�����峤�ȣ�����֪������Ҫ���ն೤�İ��塣

����һ��ʵ�ʵĿ���չim�䳤���壺
message CUserLoginReq
{
    optional string username = 1;
    optional string passwd = 2;
}
message CUserLoginResp
{
    optional uint64 uid =1;
}

ʹ�õ���google��ProtobufЭ�飨�������˶����������Կ�������¼���������������û��������룬��¼��Ӧ�����ص����û���uid����Ȼ������Protobuf����ѡ���Ŀ���չ����Э�黹��xml��json��mcpack�����Ҷ������ȡ�������ʹ��Protobuf������������ǿ�н��齫Protobuf��Ϊ���ļ�ʱͨѶӦ�����ݴ�����ʽ����http://www.52im.net/thread-277-1-1.html������IM��Э�鷽��������������http://www.52im.net/forum.php?mod=collection&action=view&ctid=18��

���������������Ƽ�ʹ��Protobuf����Ҫ�м���ԭ����


IM��ȫ��Э������


imЭ�飬��Ϣ�ı����Էdz���Ҫ ��˭����ϣ���Լ��������ݱ����������԰�ȫ���DZز����ٵġ�

1ʹ��SSL


֤������΢΢���ӣ������е��ߡ�

2���мӽ���


�Լ������ӽ��ܣ�����������Կ����������������Կ������ʽ�ж��֣���Ҫ����ô���֣�

��1���̶���Կ
�����˺Ϳͻ���Լ����һ����Կ��ͬʱԼ����һ�������㷨��eg��AES ����ÿ�οͻ���im�ڷ���ǰ������Լ���õ��㷨���Լ�Լ���õ���Կ�����ٴ��䣬�������յ����ĺ�����Լ���õ��㷨��Լ���õ���Կ�ٽ��ܡ����ַ�ʽ����Կ���㷨�Գ���Ա����͸���ġ�

��2��һ��һ��Կ
����˵������ÿ���˵���Կ�ǹ̶��ģ�����ÿ����֮���ֲ�ͬ����ʵ�����ڹ̶���Կ���㷨�а����û���ijһ�������ԣ������û�uid���ֻ��š�qq�ŵȡ�

��3����̬��Կ��һsessionһ��Կ��
��̬��Կ��һSessionһ��Կ�İ�ȫ�Ը��ߣ�ÿ�λỰǰЭ����Կ����ԿЭ�̵Ĺ���Ҫ����2�ηǶԳ���Կ���������ɣ�1�ζԳƼ�����Կ���������ɣ������������ﲻչ��������Ȥ��ͬѧ���Կ���SSL��ԿЭ�̶����̡�

IM������������


��ѡ��Э����TCP��UDP�����ڵ�IM��������������ʹ��TCP������epoll�ȼ����󣬶����ӾͲ���ƿ���ˣ�������ʮ������ûʲô���⡣58ͬ���������ϵ������Ӻ�����10w�������ܵ������ܲ��Կ��Ե�����������һ���ܵ���ʮ����

����QQʹ��UDP�����⣨������ΪʲôQQ�õ���UDPЭ��������TCPЭ�飿�������е����ۣ������˲�����QQʹ��UPD��Ϊ������Э���ij��ԣ����²�����Ϊ10����ǰClient 10K����û�еõ��ܺý�����һ̨������֧�Ų���1W��TCP���� ����Ѷ��ͬʱ�������ߣ�û�취��ֻ����UDP�ˣ���UDP�ֲ��ɿ�����ֻ����UDP��ʵ��TCP�ij�ʱ���ش���ȷ�ϵȻ�������

����


����QQʹ��UDPЭ�飬�����۵Ĺ����У���ͬѧ������һ���dz��õ����⡰���߻����£�UDP���ã���������״̬�޹أ���TCP���ȶ����������ݾ�Ҫ���ߣ��û����鲻�á���

��ʵ�ɣ����û�״̬�������Ƶ�������״̬�޹ء����������Ҹ���Ȥ�������ҿ���׫�ĺʹ�����һ�ģ�������ʹ��TCP����ô��������״̬���ײ������޹ء�

������������


����IMЭ�����ơ�ѡ�͵ȷ���������������http://www.52im.net/forum.php?mod=collection&action=view&ctid=18

��¼���������ؾ�������


[1] �й�IM/���͵�ͨ�Ÿ�ʽ��Э����ѡ����
��Protobufͨ��Э�����⣺������ʾ����ϸԭ�����ܵ���
��һ������Protocol Buffer��Java������ʾ��
��������������TCP��UDP��������
��ΪʲôQQ�õ���UDPЭ��������TCPЭ�飿��
���ƶ��˼�ʱͨѶЭ��ѡ����UDP����TCP����
������������������(��)����������TCP��UDP�IJ�����
������������������(��)����������Ϊʲô˵UDP��ʱ��TCP����������
������ѡ����ʱͨѶӦ�õ����ݴ�����ʽ��
��ǿ�н��齫Protobuf��Ϊ���ļ�ʱͨѶӦ�����ݴ�����ʽ��
��ȫ��λ���⣺Protobuf���ܵ�����û�б�JSON��5������
���ƶ���IM������Ҫ���Եļ������⣨��ͨ��Э��ѡ������
�������ƶ���IM��������Щ�ӣ��ܹ����ơ�ͨ��Э���Ϳͻ�����
��������ϵʵ�ʣ�һ�׵��͵�IMͨ��Э������������
��58����ʵʱ��Ϣϵͳ��Э�����Ƶȼ���ʵ��������
������������NodeJS��ʹ��Google��Protobuf��
������ɨä����һ������UDP�ĵ���ʱ���紫����Э�顪��QUIC������
���������ּ��Ŷӷ�����������JSON? Protobuf�����ݴ�����ʡ����(ԭ��ƪ)��
���������ּ��Ŷӷ�����������JSON? Protobuf�����ݴ�����ʡ����(ʵսƪ)��
>> ����ͬ������ ����

[2] �й�IM�ܹ����Ƶ����£�
��dz̸IMϵͳ�ļܹ�������
�������ƶ���IM��������Щ�ӣ��ܹ����ơ�ͨ��Э���Ϳͻ�����
��һ�׺��������û����ƶ���IM�ܹ�����ʵ������(����ϸͼ��)��
��һ��ԭ���ֲ�ʽ��ʱͨѶ(IM)ϵͳ���ۼܹ�������
�����㵽׿Խ�������ͷ���ʱͨѶϵͳ�ļ����ܹ��ݽ�������
��Ģ���ּ�ʱͨѶ/IM����������֮�ܹ�ѡ����
����ѶQQ1.4�������û��ļ�����ս�ͼܹ��ݽ�֮·PPT��
��΢�ź�̨����ʱ�����ĺ����������ȷּ��ܹ�����ʵ����
��΢�ż����ܼ�̸�ܹ���΢��֮��������������(�ݽ�ȫ��)��
�����ν�����΢�ż����ܼ�̸�ܹ���΢��֮������������������
�������ѱ䣺��֤΢��ǿ����̨�ܹ���0��1���ݽ����̣�һ����
��17����ʵ������Ѷ������Ʒ�ļ�����������
���ƶ���IM�д���ģȺ��Ϣ���������α�֤Ч�ʡ�ʵʱ�ԣ���
���ִ�IMϵͳ��������Ϣ��ͬ���ʹ洢����̽����
��IM��������֪ʶ����(��)���������ƴ���ͼƬ�ļ��ķ����˴洢�ܹ�����
��IM��������֪ʶ����(��)�������������������ݿ���д����ԭ����ʵ��������
��IM��������֪ʶ����(��)����ȷ����HTTP�������е�Cookie��Session��Token��
��WhatsApp����ʵ��������32�˹����ŶӴ����ļ���������
��΢������Ȧǧ�ڷ����������ļ�����ս��ʵ���ܽ���
��������ҫ2���û����ı��󣺲�Ʒ��λ�������ܹ������緽������
��IMϵͳ��MQ��Ϣ�м���ѡ�ͣ�Kafka����RabbitMQ����
����Ѷ�����ܹ�ʦ�ɻ��ܽ᣺һ�Ķ������ͷֲ�ʽϵͳ���Ƶķ���������
����΢����Ӧ�ó���Ϊ�����ܽả���罻ϵͳ�ļܹ����Ʋ�����
����������������HTTP�����˵ĸ��ؾ��⼼��ԭ����
���ӵ����Ź��ʵı���������������ϯ�ܹ�ʦ�����ڼ�IMƽ̨�ļ���ʵ����
��֪�������������ӵ�����2000��QPS������Redis�����ܻ���ʵ��֮·��
��IM��������֪ʶ����(��)��ͨ���׶�����ȷ���Ⲣ�ú�MQ��Ϣ������
��΢�ż���������΢�ŵĺ���IM������Ϣ���к�����ʵ�����㷨ԭ��ƪ����
��΢�ż���������΢�ŵĺ���IM������Ϣ���к�����ʵ�������ַ���ƪ����
���������ţ��������������ͷֲ�ʽ�ܹ����ݽ���ʷ������ԭ��������ʵ����
��һ�׸߿��á����������߲�����IMȺ�ġ����ļܹ���������ʵ����
�����\�����������Ƚ��ذ������ݿ⼼��������10����Ǩʷ��
�����\���������������н��ڼ����ݿ�OceanBase�ļ����ɳ�֮·��
���罻����������������(һ)��ȫ������QQ�����������������ܹ�������ʵ�ֵ���
���罻����������������(��)������΢��ҡһҡ������0��1�ļ����ݽ���
���罻����������������(��)��΢��ҡһҡ�����걳���ļ���ϸ����
���罻����������������(��)��΢�ź���ϵͳ������Ӧ�Ը߲�������
���罻����������������(��)��΢�ź���ϵͳ������ʵ�ָ߿����Ե���
���罻����������������(��)��΢�ź���ϵͳ�Ĵ洢���ܹ��ݽ�ʵ����
���罻����������������(��)��֧���������ĺ����߲�������ʵ����
���罻����������������(��)��ȫ������΢����������������
���罻����������������(��)��̸̸��Q�����Ĺ����߼������֡���ά���ܹ�����
����ʱͨѶ�������ţ�һ�Ķ���ʲô��Nginx�����ܷ�ʵ��IM�ĸ��ؾ��⣿��
����ʱͨѶ�������ţ���������RPC���������������ԭ������;��
����ά�ȶԱ�5�������ֲ�ʽMQ��Ϣ���У�������Ҳ�������ҵļ���ѡ������
�����λ��ӵ�������(һ)����������������IMϵͳ�ܹ��ݽ�֮·��
�����λ��ӵ�������(��)����������������IM�ͻ��˼ܹ��ݽ���ʵ���ܽ���
��IM��������֪ʶ����(��)�����ݿ���NoSQL����SQL������ƪ�͹��ˣ���
������IM���ܿͷ�ϵͳ�����ݼܹ����ƣ��������ֳ��ݽ���������PPT����
�����ﶤ��������������ҵ��IM���ߡ��������ں��˼ܹ��ϵĹ���֮����
�����λ��ӵ�������(��)������Go���������������ֲ�ʽIMϵͳ����ʵ����
>> ����ͬ������ ����

[3] ���������ܹ������������£�
����Ѷ�����ܹ�ʦ�ɻ��ܽ᣺һ�Ķ������ͷֲ�ʽϵͳ���Ƶķ���������
����������������HTTP�����˵ĸ��ؾ��⼼��ԭ����
���ӵ����Ź��ʵı���������������ϯ�ܹ�ʦ�����ڼ�IMƽ̨�ļ���ʵ����
��֪�������������ӵ�����2000��QPS������Redis�����ܻ���ʵ��֮·��
���������ţ��������������ͷֲ�ʽ�ܹ����ݽ���ʷ������ԭ��������ʵ����
�����\�����������Ƚ��ذ������ݿ⼼��������10����Ǩʷ��
�����\���������������н��ڼ����ݿ�OceanBase�ļ����ɳ�֮·��
������O2O��̨�ܹ��ݽ�ʵ������0��4000�߲������󱳺���Ŭ����
���������˼ܹ�ʦ�ػ�֪ʶ��ʷ����ȫMySQL�����Ż������ܽ���
��С�׼�������������С������ϵͳǧ���߲����ܹ����ݽ���ʵ����
��һƪ�����ֲ�ʽ�ܹ��µĸ��ؾ��⼼�������ࡢԭ�����㷨��������������
��ͨ���׶�������������֧�Ű��򲢷������ݿ��ܹ�����
����ά�ȶԱ�5�������ֲ�ʽMQ��Ϣ���У�������Ҳ�������ҵļ���ѡ������
�������ֵ��ܹ�ʦ��һƪ�͹�����100��1000���߲����ļܹ��ݽ�֮·��
�����ż������������Ƚ������ŵķֲ�ʽID�����㷨��
��12306��Ʊ��������ʾ������������Goʵ�ְ���QPS����ɱϵͳ(��Դ��)��
>> ����ͬ������ ����

��ԭ�����ӣ�http://chuansong.me/n/1393172��

��ʱͨѶ�� - ��ʱͨѶ������������ ��Դ�� - ��ʱͨѶ������������

��һƪ��̸̸�ƶ��� IM �����е�¼�������Ż���һƪ�������ƶ���IM��������Щ�ӣ��ܹ����ơ�ͨ��Э���Ϳͻ���

��������¼�����¼���ר��

�Ƽ�����
���� 30
˵�ĺܲ�����ţ�ƺ����ߴ��ϵļܹ�����Ҳ�Ȳ��ϼ���ʵ�õ����ֺʹ��������壬�ղ���
ǩ��: ���������������������ǵ��ϰ�
�ղء�
��л�����ղ�
ǩ��: asdf
��һ��
ǩ��: ��־���¾���
������������������
�ղ��ղ�
��ʵ�ã�����
ʵ�ã�Mark
ǩ��: ��������
Ҫ��IMSDK���Ǽ�ͷ�������鰡
ǩ��: ��������
���ã�Sands_Lee ������ 2017-08-31 18:15
Ҫ��IMSDK���Ǽ�ͷ�������鰡

����ߣ
�ղ��ˡ�
ǩ��: ��
ѧϰ��
ǩ��: ǩ������Ҫ�²۵���
58�ĵ�����10w���ӣ���ô�������������ڲ�һ����
��л�����ղ�
��л�����ղ� ¥��һֱ����������������ѧϰ �����ˣ�
ǩ��: ����������������
ѧϰ
ǩ��: ѧϰ��
ѧϰ��
ѧϰ��
ѧϰ��
����¥�� ×
ʹ��΢�Ŵ��ͣ� ʹ��֧�������ͣ�

���ض���