Giter Site home page Giter Site logo

yuzeyang / gcdasyncsocketmanager Goto Github PK

View Code? Open in Web Editor NEW
260.0 7.0 63.0 340 KB

GCDAsyncSocketManager provides qiuick-to-use GCDAsyncSocket to build socket,it contains connect,disconnect,reconnect,beat,custom request 基于GCDAsyncSocketManager快速搭建socket,它包含了建连、断开、重连、心跳、通用请求

Objective-C 99.65% Ruby 0.35%

gcdasyncsocketmanager's Introduction

GCDAsyncSocketManager

Introduction

GCDAsyncSocketManager provides qiuick-to-use GCDAsyncSocket to build socket,it contains connect,disconnect,reconnect,beat,general request
GCDAsyncSocketManager提供快速使用GCDAsyncSocket来搭建socket,它包含了建连、断开、重连、心跳、通用请求

members

Zeeyangbroccolii

How to use

socket connect:

  1. you can connect to the default environment when app enter forground or ViewController view will appear
[[GCDAsyncSocketCommunicationManager sharedInstance] createSocketWithToken:@"your token" channel:@"your communication channel"];
  1. you can connect to the custom environment
- (GACConnectConfig *)connectConfig {
    if (!_connectConfig) {
        _connectConfig = [[GACConnectConfig alloc] init];
        _connectConfig.channels = kDefaultChannel;
        _connectConfig.currentChannel = kDefaultChannel;
        _connectConfig.host = @"online socket address";
        _connectConfig.port = 7070;
        _connectConfig.socketVersion = 5;
    }
    _connectConfig.token = @"f14c4e6f6c89335ca5909031d1a6efa9";
    
    return _connectConfig;
}

 [[GCDAsyncSocketCommunicationManager sharedInstance] createSocketWithConfig:self.connectConfig];

socket disconnect:

you can disconnect when app enter background

[[GCDAsyncSocketCommunicationManager sharedInstance] disconnectSocket];

we provide a general interface to send request

type is the request type

body is the request body

callback is the request handle complete callback to app

- (void)socketWriteDataWithRequestType:(GACRequestType)type
                           requestBody:(nonnull NSDictionary *)body
                            completion:(nullable SocketDidReadBlock)callback;

for example:

[[GCDAsyncSocketCommunicationManager sharedInstance] socketWriteDataWithRequestType:GACRequestType_GetConversationsList requestBody:requestBody completion:^(NSError * _Nullable error, id  _Nullable data) {
        // do something
        if (error) {
            
        } else {
            
        }
    }];

Related articles

iOS 基于GCDAsyncSocket快速开发Socket通信

iOS Socket重构设计

gcdasyncsocketmanager's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

gcdasyncsocketmanager's Issues

封装层次不明、功能混乱

1、为什么要封装成两个类GCDAsyncSocketCommunicationManager和GCDAsyncSocketManager?然后让一个单例去持有另一个单例
2、还有GCDAsyncSocketDelegate这个代理,从CommunicationManager到GCDAsyncSocketManager最后传给GCDAsyncSocket,代理实现的地方是CommunicationManager,但是CommunicationManager有没有直接持有GCDAsyncSocket对象,我有点看蒙了
3、能解释一下这两个类分别承担的任务吗?

socket did write data while server client can't receive it

I run a server on my desktop(nc- lk 2000),the client on the iPad.
The server can get what the client send,after I cut off my network and then reconnected,log in Xcode show GCDAsyncSocket connected success,and msg send success when I click sendMsg btn on my iPad,but I saw nothing on the terminal.only if i re nc -lk 2000 can I get data sended from the client.
Could u please tell me how to fix it? thanks very much.

关于断线重连的问题想请教一下

#pragma mark socket已经连接失败

  • (void)socketDidDisconnect:(GCDAsyncSocket *)clientSocket withError:(NSError *)err{
    NSLog(@"与服务器断开连接%@",err);
    self.connectStatus = -1;
    [self.beatTimer invalidate];
    self.beatTimer = nil;
    [self socketDidDisconectBeginSendReconnect:@"ping"];
    }

//断线重连

  • (void)socketDidDisconectBeginSendReconnect:(NSString *)reconnectBody {
    NSLog(@"断线心跳");
    self.reconnectTimer = [NSTimer scheduledTimerWithTimeInterval:2
    target:self
    selector:@selector(reconnection)
    userInfo:nil
    repeats:NO];
    [[NSRunLoop mainRunLoop] addTimer:self.reconnectTimer forMode:NSRunLoopCommonModes];
    }
    //断线重连定时器
  • (void)reconnection{
    NSError *error = nil;
    if (![self.clientSocket connectToHost:self.serveSocketHost onPort:self.serveSocketPort withTimeout:30 error:&error]) {
    //-1 未连接 ,然后判断未连接的时候就会自动连接
    self.connectStatus = -1;
    [self connectSocketHost];
    }
    }

我删除了断线的次数,请问这样子为什么我在主动断线后走不到- (void)reconnection 这个方法呀?
请问我这样子在断线后再去发起一次连接会造成递归吗?(因为我现在运行不到定时器所以不能确定啊。。)

关于host地址配置问题

找了好久发现竟然写在了config里,建议在readme里提示下。另外,这样写的话如果想用你的框架建立不同地址的链接是否就有些麻烦了,建议还是放在manager里

suggest not to use main queue

代码中
[[GCDAsyncSocket alloc] initWithDelegate:delegate delegateQueue:dispatch_get_main_queue()];

使用main_queue 导致回调在主线程, 这样不好吧...给一下 你项目中实际怎么处理的啊

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.